题意:
给n*m个格子,初始时每个格子中有个数值为0,部分格子中含有炸弹,每个炸弹爆炸可以将周围的8个非炸弹格子中的数值加1,求全部炸弹炸完后那些非0且非炸弹格子中的数是多少。
思路:
另开一个矩阵,每炸弹一炸就9个格子全加1,全炸完后再输出时判断是否为0,若是则输出'-',否则,若是炸弹格子则输出'*',若是数字就输出该数字。
#include <bits/stdc++.h>
using namespace std;
int a[][];//统计数值
int n, m;
bool b[][];
void cal(int x,int y)//9个全加,没关系
{
a[x-][y-]++;
a[x-][y]++;
a[x-][y+]++; a[x+][y-]++;
a[x+][y]++;
a[x+][y+]++; a[x][y+]++;
a[x][y]++;
a[x][y-]++;
} int main()
{
//freopen("input.txt", "r", stdin);
int flag=;
char c;
while(cin>>n>>m)
{
if(flag>) printf("\n");//输出格式?
else flag++;
memset(a,,sizeof(a));
memset(b,,sizeof(b)); for(int i=; i<=m; i++) //宽度
for(int j=; j<=n; j++) //高度
{
cin>>c;
if(c=='*') b[i][j]=true; //负代表不能累加
} for(int i=; i<=m; i++)
for(int j=; j<=n; j++)
if(b[i][j]==true) cal(i,j); for(int i=; i<=m; i++)
{
for(int j=; j<=n; j++)
{
if(b[i][j]==false)
{
if(a[i][j]>)
printf("%d",a[i][j]);
else
printf("-");
}
else
printf("*");
}
printf("\n");
}
}
return ;
}
AC代码