多源BFS:173
作者:
总打瞌睡的天天啊
,
2024-10-20 19:14:08
,
所有人可见
,
阅读 4
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=1010;
char g[N][N];
int dist[N][N];
typedef pair<int,int> PII;
int tt=-1,hh=0;
int n,m;
PII q[N*N];
int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
void bfs()
{
memset(dist,-1,sizeof dist);
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
if(g[i][j]=='1')
{
dist[i][j]=0;
q[++tt]={i,j};
}
}
while(hh<=tt)
{
auto t=q[hh++];
for(int i=0;i<=3;i++)
{
int wx=t.first+dx[i],wy=t.second+dy[i];
if(wx>=n||wx<0||wy>=m||wy<0)continue;
if(dist[wx][wy]==-1)
{
dist[wx][wy]=dist[t.first][t.second]+1;
q[++tt]={wx,wy};
}
}
}
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
{
cin>>g[i];
}
bfs();
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
cout<<dist[i][j]<<' ';
cout<<endl;
}
return 0;
}
//错因:没给q[0]赋值,第一步取不出东西