废话:
唉打比赛天天自闭有什么意思,还不如多写写题解,开通一下思路
题解:
找到所有水路的点,压入对列,然后就进行bfs()
即可,走过的点不在走,然后就没有了…
AC代码:
#include<bits/stdc++.h>
using namespace std;
int dis[805][805];
char Map[805][805];
int n,m;
int dir[4][2]={1,0,0,1,-1,0,0,-1};//方向
struct node
{
int x,y,step;
}st,en;
bool judge()
{
if(en.x<0||en.x>=n||en.y<0||en.y>=m||dis[en.x][en.y]!=-1)//判断条件
{
return true;
}
return false;
}
queue<node>q;
void bfs()
{
while(!q.empty())
{
st=q.front();
q.pop();
for(int i=0;i<4;i++)
{
en.x=st.x+dir[i][0];
en.y=st.y+dir[i][1];
if(judge())
continue;
en.step=st.step+1;
dis[en.x][en.y]=en.step;
q.push(en);
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
printf("%d ",dis[i][j]);
}
printf("\n");
}
}
int main()
{scanf("%d %d",&n,&m);
for(int i=0;i<n;i++)
scanf("%s",Map[i]);
memset(dis,-1,sizeof(dis));
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(Map[i][j]=='0')
{
st.x=i;
st.y=j;
dis[i][j]=0;
st.step=0;
q.push(st);
}
}
}
bfs();
}