求救,有大佬看一下指出问题吗
查看原帖
求救,有大佬看一下指出问题吗
677489
Aaron530楼主2022/7/25 22:06
#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吗?希望您能指出我的问题,谢谢!!!

2022/7/25 22:06
加载中...