#include <bits/stdc++.h>
using namespace std;
int n,m,x,y;
char mp[185][185];
int dis[185][185],dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
queue<pair<int,int> > q;
void dfs(int x,int y)
{
dis[x][y]=0;
q.push(make_pair(x,y));
while(!q.empty())
{
int a=q.front().first,b=q.front().second;
q.pop();
for(int i=0;i<4;i++)
{
int f=0;
int nx=a+dir[i][0],ny=b+dir[i][1];
if(nx<0||nx>=n||ny<0||ny>=m)continue;
if(dis[nx][ny]==-1)
{
dis[nx][ny]=0x3f3f3f3f;
f=1;
}
if(mp[nx][ny]=='1')dis[nx][ny]=0;
else dis[nx][ny]=min(dis[a][b]+1,dis[nx][ny]);
if(f)q.push(make_pair(nx,ny));
}
}
}
int main()
{
memset(dis,-1,sizeof(dis));
cin>>n>>m;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>mp[i][j];
if(mp[i][j]=='1')
{
x=i;
y=j;
}
}
}
dfs(x,y);
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)cout<<dis[i][j]<<" ";
cout<<"\n";
}
return 0;
}
应该是逻辑出了问题,求hack