#include<cstdio>
#include<iostream>
#include<queue>
using namespace std;
int n,map[30][30]={0},dic[2][4]={{-1,1,0,0},{0,0,-1,1}};
bool vis[30][30]={0};
int x,y,xx,yy;
typedef pair<int ,int>pii;
queue <pii >q;
void bfs(int r,int c){
pii p;
if(vis[r][c]==1)return ;
vis[r][c]=1;
q.push(make_pair(r,c));
while(!q.empty()){
p=q.front();
q.pop();
x=p.first,y=p.second;
for(int i=0;i<4;i++){
xx=x+vis[0][i];
yy=y+vis[1][i];
if(xx>=1&&xx<=n&&yy>=1&&yy<=n&&vis[xx][yy]==0&&map[xx][yy]==0){
vis[xx][yy]=true;
q.push(make_pair(xx,yy));
}
}
}
}
int main(){
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%d",&map[i][j]);
}
}
for(int i=1;i<=n;i++){
if(map[1][i]==0&&vis[1][i]!=1)bfs(1,i);
if(map[n][i]==0&&vis[n][i]!=1)bfs(n,i);
if(map[i][1]==0&&vis[i][1]!=1)bfs(i,1);
if(map[i][n]==0&&vis[i][n]!=1)bfs(i,n);
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(map[i][j]==0&&vis[i][j]==1)printf("%d ",0);
if(map[i][j]==1)printf("%d ",1);
if(map[i][j]==0&&vis[i][j]==0)printf("%d ",2);
}
cout<<endl;
}
return 0;
}
by FALSEduck @ 2018-10-05 19:32:58
看不清
by 大壶 @ 2018-10-05 19:34:21
```cpp
#include<cstdio>
#include<iostream>
#include<queue>
using namespace std;
int n,map[30][30]={0},dic[2][4]={{-1,1,0,0},{0,0,-1,1}};
bool vis[30][30]={0};
int x,y,xx,yy;
typedef pair<int ,int>pii;
queue <pii >q;
void bfs(int r,int c){
pii p;
if(vis[r][c]==1)return ;
vis[r][c]=1;
q.push(make_pair(r,c));
while(!q.empty()){
p=q.front();
q.pop();
x=p.first,y=p.second;
for(int i=0;i<4;i++){
xx=x+vis[0][i];
yy=y+vis[1][i];
if(xx>=1&&xx<=n&&yy>=1&&yy<=n&&vis[xx][yy]==0&&map[xx][yy]==0){
vis[xx][yy]=true;
q.push(make_pair(xx,yy));
}
}
}
}
int main(){
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%d",&map[i][j]);
}
}
for(int i=1;i<=n;i++){
if(map[1][i]==0&&vis[1][i]!=1)bfs(1,i);
if(map[n][i]==0&&vis[n][i]!=1)bfs(n,i);
if(map[i][1]==0&&vis[i][1]!=1)bfs(i,1);
if(map[i][n]==0&&vis[i][n]!=1)bfs(i,n);
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(map[i][j]==0&&vis[i][j]==1)printf("%d ",0);
if(map[i][j]==1)printf("%d ",1);
if(map[i][j]==0&&vis[i][j]==0)printf("%d ",2);
}
cout<<endl;
}
return 0;
}
```
by FALSEduck @ 2018-10-05 19:36:40
```cpp
#include<cstdio>
#include<iostream>
#include<queue>
using namespace std;
int n,map[30][30]={0},dic[2][4]={{-1,1,0,0},{0,0,-1,1}};
bool vis[30][30]={0};
int x,y,xx,yy;
typedef pair<int ,int>pii;
queue <pii >q;
void bfs(int r,int c){
pii p;
if(vis[r][c]==1)return ;
vis[r][c]=1;
q.push(make_pair(r,c));
while(!q.empty()){
p=q.front();
q.pop();
x=p.first,y=p.second;
for(int i=0;i<4;i++){
xx=x+vis[0][i];
yy=y+vis[1][i];
if(xx>=1&&xx<=n&&yy>=1&&yy<=n&&vis[xx][yy]==0&&map[xx][yy]==0){
vis[xx][yy]=true;
q.push(make_pair(xx,yy));
}
}
}
}
int main(){
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%d",&map[i][j]);
}
}
for(int i=1;i<=n;i++){
if(map[1][i]==0&&vis[1][i]!=1)bfs(1,i);
if(map[n][i]==0&&vis[n][i]!=1)bfs(n,i);
if(map[i][1]==0&&vis[i][1]!=1)bfs(i,1);
if(map[i][n]==0&&vis[i][n]!=1)bfs(i,n);
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(map[i][j]==0&&vis[i][j]==1)printf("%d ",0);
if(map[i][j]==1)printf("%d ",1);
if(map[i][j]==0&&vis[i][j]==0)printf("%d ",2);
}
cout<<endl;
}
return 0;
}
```
@[大壶](/space/show?uid=117768)
by FALSEduck @ 2018-10-05 19:40:09
就第2个吗
那下载一下数据就好了
by 大壶 @ 2018-10-05 19:46:44
看着思路好像没毛病。。。。
by 大壶 @ 2018-10-05 19:48:12
广搜没有遍历玩
6
0 0 1 1 1 0
1 1 1 0 1 0
1 0 0 0 0 1
1 1 0 1 1 1
0 1 0 1 0 0
0 1 1 1 0 0
by FALSEduck @ 2018-10-05 19:50:06