问题描述 :
扫雷游戏你一定玩过吧!现在给你若干个n×m的地雷阵,请你计算出每个矩阵中每个单元格相邻单元格内地雷的个数,每个单元格最多有8个相邻的单元格。 0<n,m<=100
输入说明 :
输入包含若干个矩阵,对于每个矩阵,第一行包含两个整数n和m(0<n,m<=100),分别表示这个矩阵的行数和列数。接下来n行每行包含m个字符。安全区域用‘.’表示,有地雷区域用’*'表示。当n=m=0时输入结束。
输出说明 :
对于第i个矩阵,首先在单独的一行里打印序号:“Field #i:”,接下来的n行中,读入的’.'应被该位置周围的地雷数所代替。输出的每两个矩阵必须用一个空行隔开。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <stdbool.h>
char a[100][100];
int m,n;
void bb(int i,int j)
{
int sum=0,x=i-1,y=j-1,x1=i+1,y1=j+1,i1,j1;
if(a[i][j]=='*')
{
printf("*");
}
else
{
if(i==0)
{
x=0;
}
if(j==0)
{
y=0;
}
if(i==m-1)
{
x1=m-1;
}
if(j==n-1)
{
y1=n-1;
}
for(i1=x;i1<=x1;i1++)
{
for(j1=y;j1<=y1;j1++)
{
if(a[i1][j1]=='*')
{
sum++;
}
}
}
printf("%d",sum);
}
}
int main()
{
int i,j,count=0;
char x;
while(1)
{
scanf("%d %d",&m,&n);
if(m==0&&n==0)
{
break;
}
count++;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%c",&x);
if(x==10)
{
j--;
}
if(x!=10)
{
a[i][j]=x;
}
}
}
printf("Field #%d:\n",count);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
bb(i,j);
}
printf("\n");
}
printf("\n");
}
return 0;
}