bfs是广度优先 最先到达white点的路径所需步骤最少 所以bfs遍历整个图 找到最少步骤的max
学过bfs肯定能理解的 不理解就得去学bfs了
出错可能是因为题意吧
我的代码特别冗杂
#include<bits/stdc++.h> #define ll long long #define sc(x) scanf("%d",&x) using namespace std; struct ed { int x,y; int c; }e[1100000]; int f[5][2]={{1,0},{-1,0},{0,1},{0,-1}}; int dis[1100][1100]; string a[1100]; int vis[1100][1100]; int tt[1100][1100]; queue<int>q; int main() { int n,m; cin>>n>>m; int t=0; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) for(int j=0;j<m;j++) { t++; e[t].x=j; e[t].y=i; tt[i][j]=t; if(a[i][j]=='#') { q.push(t); vis[i][j]=1; } } int ans=0; while(!q.empty()) { int t=q.front(); q.pop(); int x=e[t].x; int y=e[t].y; for(int i=0;i<=3;i++) { int nx=x+f[i][0]; int ny=y+f[i][1]; if(nx>=0&&ny>0) { if(a[ny][nx]=='.'&&!vis[ny][nx]) { a[ny][nx]='#'; int temp=tt[ny][nx]; vis[ny][nx]=1; q.push(temp); dis[ny][nx]=dis[y][x]+1; ans=max(ans,dis[ny][nx]); } } } } cout<<ans<<endl; }