扫雷游戏

/*

http://acm.fzu.edu.cn/problem.php?pid=1056

扫雷是Windows自带的游戏。游戏的目标是尽快找到雷区中的所有地雷,而不许踩到地雷。如果方块上的是地雷,将输掉游戏。如果方块上出现数字,则表示在其周围的八个方块中共有多少颗地雷。

你的任务是在已知地雷出现位置的情况下,得到各个方块中的数据。

*... ....      “*”表示有地雷 .*..      “.”表示无地雷 ....

经过处理应得到

*100 2210 1*10 1110

Input

输入有多组数据,每组数据的第一行有两个数字,m,n(0<m,n<100)表示游戏中雷区的范围为m×n。接下来m行每行有n个字符。“*” 表示有地雷,“.”表示无地雷。最后一组数据m=0,n=0表示输入结束,不需要处理。

Output

对于每组输入数据,输出结果,各方块数字间不留空格。每组结果之后有一个空行。

*/

#include<iostream>

using namespace std;

int main()

{

         char a[100][100];

         int tag[100][100];

         int i,j,n,m,num;

         while(true)

         {

                   cin>>n>>m;

                   if(m==0&&n==0)

                            break;

                   for(i=0;i<n;i++)

                            for(j=0;j<m;j++)

                            {

                                     cin>>a[i][j];

                                     if(a[i][j]=='*')

                                               tag[i][j]=1;

                                     else

                                               tag[i][j]=0;

                            }

                            for(i=0;i<n;i++)

                            {

                                     for(j=0;j<m;j++)

                                     {

                                               num=0;

                                               if(i-1>=0&&j>=0&&tag[i-1][j]==1)

                                                        num++;

                                               if(i-1>=0&&j+1<m&&tag[i-1][j+1]==1)

                                                        num++;

                                               if(i-1>=0&&j-1>=0&&tag[i-1][j-1]==1)

                                                        num++;

                                               if(i>=0&&j+1<m&&tag[i][j+1]==1)

                                                        num++;

                                               if(i>=0&&j-1>=0&&tag[i][j-1]==1)

                                                        num++;

                                               if(i+1<n&&j+1<m&&tag[i+1][j+1]==1)

                                                        num++;

                                               if(i+1<n&&j>=0&&tag[i+1][j]==1)

                                                        num++;

                                               if(i+1<n&&j-1>=0&&tag[i+1][j-1]==1)

                                                        num++;

                                               if(tag[i][j]==1)

                                                        num++;

                                               if(a[i][j]!='*')

                                                        cout<<num;

                                               else

                                                        cout<<'*';

                                     }

                                     cout<<endl;

                            }

                            cout<<endl;

         }

         return 0;

}

 

/*

2 3

***

...

 

4 4

*...

....

.*..

....

0 0

*/

posted @ 2012-11-25 14:14  ♂咱說 ろ算  阅读(274)  评论(0编辑  收藏  举报