代码如下:
#include <bits/stdc++.h>
using namespace std;
const int N=200;
int main()
{
int n,m;
cin>>n>>m;
//定义2个矩阵(二维数组),一个作为输入一个作为答案
int num[N][N];
int answer[N][N];
//定义一个二维数据作为九宫格遍历
//双重循环遍历输入
for(int i=1;i<=n;++i)//某行
{
for(int j=1;j<=m;++j)//某行中各列
{
cin>>num[i][j];
}
}
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j)
{
//遍历每一个输入进矩阵的数
if(num[i][j]==1)
{
answer[i][j]=9;//将该格的答案=9,后续将正常输出
continue;//结束本次循环(不必要再遍历九宫格,该位置答案就是9),跳到下一次
}
else//遍历九宫格(围着该数)
{
for(int x=max(1,i-1);x<=min(n,i+1);++x)//考虑行
{
for(int y=max(1,j-1);y<=min(m,j+1);++y)//考虑列
{//扫描周围八个相邻方格中的某格时,先判断该格是否有雷
//有的话answer矩阵在对应位置的数值加一
if(num[x][y]) answer[i][j]++;
}
}
}
}
}
//现在遍历answer矩阵,每次循环都输出该位置对应的最终答案
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j)
{
cout<<answer[i][j]<<" ";
}
cout<<"\n";
}
return 0;
}