/*递归的流程
建两个数组一个用来存地图一个来存距离
将距离数组全赋值为-1;
将初始点加入队列并将初始点距离赋值为0;
进入while循环建立变量取出队首元素的值
向不同方向试探筛选些不符合要求的
*/
#include<bits/stdc++.h>
using namespace std;
int f[40][40];
int dist[40][40];
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
struct node{
int x,y;
};
int main(){
memset(dist,-1,sizeof(dist));
queue<node> q;
int n;
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%d",&f[i][j]);
// printf("%d",f[i][j]);
}
}
node t;
t.x=0;
t.y=0;
q.push(t);
dist[0][0]=0;
while(q.size()){
int a=q.front().x;
int b=q.front().y;
q.pop();
for(int i=0;i<4;i++){
int k=a+dx[i];
int t=b+dy[i];
if(k<0||k>n+1||t<0||t>n+1)continue;
if(f[k][t]==1)continue;
if(dist[k][t]>=0)continue;
f[k][t]=-1;
dist[k][t]=dist[a][b]+1;
node temp;
temp.x=k;
temp.y=t;
q.push(temp);
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(f[i][j]==-1)cout<<"0"<<" ";
else if(f[i][j]==0)cout<<"2"<<" ";
else printf("%d ",f[i][j]);
}
cout<<endl;
}
return 0;
}
1162填涂颜色bfs总结
最新推荐文章于 2024-11-16 13:27:03 发布