每次可以把黑色方块的上下左右四个方向的白色方块变成黑色,问最少需要多少次才能把所有方块变成黑色
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
const int dx[]={1,-1,0,0};
const int dy[]={0,0,1,-1};
int n,m,ans;
char s[1111][1111];
struct node { int x,y,step; };
queue<node> que;
void bfs() {
while (!que.empty()) {
node now=que.front(); que.pop();
ans=max(ans,now.step);
for (int i=0;i<4;i++) {
node nex=node{now.x+dx[i],now.y+dy[i],now.step+1};
if (s[ nex.x ][ nex.y ]=='.') {
s[ nex.x ][ nex.y ]='#';
que.push(nex);
}
}
}
}
int main () {
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++) {
scanf(" %c",&s[i][j]);
if (s[i][j]=='#')
que.push(node{i,j,0});
}
bfs();
printf("%d\n",ans);
return 0;
}