洛谷p1162(bfs)
把0全变成2,再bfs,代码如下
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> p;
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
int maps[50][50];
int n;
void bfs(int x,int y){
queue<pair<int,int> > q;
q.push(p(x,y));
while(!q.empty()){
int nx=q.front().first;
int ny=q.front().second;
q.pop();
for(int i=0;i<4&&maps[nx][ny]!=1;i++){
int px=nx+dx[i];
int py=ny+dy[i];
if(px<0||px>=n||py<0||py>=n||maps[px][py]==1||maps[px][py]==0) continue;
q.push(p(px,py));
maps[px][py]=0;
}
}
}
int main(){
while(cin>>n){
memset(maps,0,sizeof maps);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>maps[i][j];
if(maps[i][j]==0)
maps[i][j]=2;
}
}
for(int i=0;i<n;i++ ){
bfs(0,i);
bfs(n-1,i);
bfs(i,0);
bfs(i,n-1);
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cout<<maps[i][j]<<' ';
if(j==n-1)
cout<<endl;
}
}
}return 0;
}