#include <bits/stdc++.h>
using namespace std;
int n,m;
int a[105][105],book[105][105],cnt;
char map1[105][105];
void tidy(int x,int y)//初始化book(为了减少循环次数,只初始化了每个地格的一周)
{
for(int i=x-1;i<=x+1;i++)
for(int j=y-1;j<=y+1;j++)
book[i][j]=0;
return ;
}
int dfs(int x,int y)//搜索附近地雷
{
if(x<1 || x>n || y<1 || y>n)//越界
return 0;
if(book[x][y]==1)//走过的
return 0;
if(a[x][y]==0)//是地雷
cnt++;//数量++
dfs(x-1,y-1);//8个方向
dfs(x-1,y);
dfs(x-1,y+1);
dfs(x,y-1);
dfs(x,y+1);
dfs(x+1,y-1);
dfs(x+1,y);
dfs(x+1,y+1);
return cnt;//返回数量
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
cin>>map1[i][j];//读入信息
if(map1[i][j]=='*')//当前地格是地雷格
a[i][j]=0;//a[i][j]=0 当前格子有地雷
else
a[i][j]=1;//没有地雷
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(a[i][j]==1)//没有地雷
{
tidy(i,j);//初始化book
cnt=0;//初始化地雷数量
int sum=dfs(i,j);//搜索并记录数量
a[i][j]=sum;//赋值(当前地格地雷数量)
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
if(map1[i][j]=='*')//有地雷
cout<<'*';
else//没有地雷
cout<<a[i][j];//输出数量
cout<<endl;
}
return 0;
}
有大佬知道为什么MLE吗?希望您能指出我的问题,谢谢!!!