حل سوال minsweeper کتاب programming challenges با کد ۱۰۱۸۹

mine1

این بار می خواهیم سوالی دیگر از کتاب programming challenges را حل کنیم  احتمالا شما بازی مین  روب ویندوز را زیاد بازی کرده اید این سوال کتاب شکل دیگر این بازی است  پس با ما همراه باشید.اگر نمی دانید کتاب programming challenges چیست و یا در مورد حل سوال های آن توسط ما چیزی نمی دانید ابتدا این جا کلیک کنید.

در این برنامه تعدادی ماتریس داده می شود که دارای تعدادی * که در اینجا نقش مین را برای ما ایفا می کند هستند وظیفه برنامه ما این است که  مشخص کند اطراف هر خانه چند مین وجود دارد .اول بریم خود سوال را ببینیم:

PC / UVa IDs :110102 / 10189

Popularity : A

Success rate : high Level

Have you ever played Minesweeper? This cute little game comes with a certain operating system whose name we can’t remember. The goal of the game is to find where all the mines are located within a M×N field.
The game shows a number in a square which tells you how many mines there are adjacent to that square. Each square has at most eight adjacent squares. The 4×۴ field on the left contains two mines, each represented by a “*” character. If we represent the same field by the hint numbers described above, we end up with the field on the right:

*…
….
.*..
….

*۱۰۰
۲۲۱۰
۱*۱۰
۱۱۱۰

Input

The input will consist of an arbitrary number of fields. The first line of each field contains two integers n and m (0<n,m≤۱۰۰) which stand for the number of lines and columns of the field, respectively. Each of the next n lines contains exactly m characters, representing the field.
Safe squares are denoted by “.” and mine squares by “*” both without the quotes.
The first field line where n=m= 0 represents the end of input and should not be
processed.

Output

For each field, print the message Field #x: on a line alone, where x stands for the
number of the field starting from 1. The next n lines should contain the field with the “.” characters replaced by the number of mines adjacent to that square. There must be an empty line between field outputs.

Sample Input
۴۴
*…
….
.*..
….
۳۵
**…
…..
.*…
۰۰

Sample Output
Field #1:
*۱۰۰
۲۲۱۰
۱*۱۰
۱۱۱۰

Field #2:
**۱۰۰
۳۳۲۰۰
۱*۱۰۰

 

ترجمه تقریبی فارسی سوال minsweeper با کد UVa 10189  :

 

احتمالا تا حالا بازی جذاب مین روب را بازی کرده اید ، این بازی در بعضی از سیستم عامل ها هست که ما نمی توانیم از آن ها یاد کنیم  ( ویندوز مایکروسافت را می گه )  هدف بازی اینه که تمام مین های موجود در صفحه M * N را پیدا کنیم.

بازی مین روب به شما اعدادی را نشان می دهد ، این اعداد نشان می دهد در خانه های اطراف یک خانه چند مین وجود دارد حداکثر اطراف یک خانه ۸ مین وجود دارد.

صفحه ۴*۴ که در پایین می بینید دارای ۲ مین است که هر مین با کاراکتر ‘*’ نشان داده شده است. اگر با توضیحاتی که داده شد خانه های خالی را پر کنیم جدول بعدی آن به دست می آید.

*…
….
.*..
….

*۱۰۰
۲۲۱۰
۱*۱۰
۱۱۱۰

ورودی :

ورودی می تواند شامل تعداد دلخواهی صفحه مین باشد.خط اول هر صفحه بازی دو عدد   N وM قرار دارد(n,m≤۱۰۰) , (۰<n,m) که اولی تعداد سطر های صفحه و دومی تعداد ستون های صفحه را نشان می دهد.n سطر بعدی اون خط دارای m کاراکتر است.خانه های مین دار  با  “*” و خانه های امن  با “.” نشان داده شده است. وقتی به خط ۰ ۰ (دو تا صفر) رسیدیم معنی اش آن است که به انتهای کار گرفتن ورودی رسیدیم .

این عکس رو از ورودی ام گرفته ام:

ورودی برنامه مین روب

 

خروجی:

برای هر صفحه بازی پیام  Field #x: را در یک خط به صورت تنها چاپ کنید. x شماره صفحه است که از ۱ شروع می شود. n خط بعدی باید صفحه بازی مین روب باشد که ‘.’ آن با عداد جایگزین شده باشد. اعدادی که تعداد مین ها در خانه های اطراف را نشان می دهد.باید بین هر فیلد یک خط خالی چاپ شود.

این عکس هم از خروجی برنامه ام گرفته ام :

خروجی برنامه مین روب

ورودی نمونه :
۴۴
*…
….
.*..
….
۳۵
**…
…..
.*…
۰۰

خروجی نمونه :
Field #1:
*۱۰۰
۲۲۱۰
۱*۱۰
۱۱۱۰

Field #2:
**۱۰۰
۳۳۲۰۰
۱*۱۰۰

خیلی خوب است اگر خودتان دقایقی وقت برای حل این سوال بگذارید و بعد ادامه مطلب را بخوانید اگر راه حل خود را بفرستید در همین صفحه قرار خواهد گرفت

حالا بریم سراغ حل برنامه.باید اول از همه ورودی خواند ورودی شامل تعدادی صفحه مین است که ۲ راه حل دارد بهترین راه اینه که ورودی بریزیم تو یک فایل بعد از یک فایل بخونیم،راه دوم اینه که ورودی بریزیم تو رم رایانه که برای این کار استفاده از وکتور خیلی راحته .من اون موقع که این برنامه را نوشتم بیشتر نیاز داشتم که با وکتور کار کنم به همین خاطر از وکتور استفاده کرده ام.

برای راحتی کار کلاسی به اسم mine درست کرده ام که اطلاعات برد ها را مستقیم در آن ها بریزم.که شامل عضوهای  len , wit, str است . len تعداد سطر ها را در خودش نگه می دارد wit تعداد ستون ها را در خود نگه می دارد و str هم وکتوری از رشته ها  است که خود برد را در خود نگه می دارد . نکته اصلی کار همین بود اینم خود کد :

 

اگر سوال انتقاد یا پیشنهادی داشتید خوشحال  می شویم در نظرات بیان کنید.

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)

نظر خود را بنویسید.

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *