#include<bits/stdc++.h>
using namespace std;
int ditu[35][35];
int main()
{
int n;
cin>>n;
queue<int>uex,uey;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
scanf("%d",&ditu[i][j]);
if(i==1||j==0||i==n||j==n)
{
if(ditu[i][j]==0)
{
uex.push(i);
uey.push(j);
}
}
}
}
while(!uex.empty())
{
int x=uex.front();
int y=uey.front();
uex.pop();
uey.pop();
if(ditu[x][y]!=0)
{
continue;
}
ditu[x][y]=-1;
if(x>1&&ditu[x-1][y]==0)
{
uex.push(x-1);
uey.push(y);
}
if(y>1&&ditu[x][y-1]==0)
{
uex.push(x);
uey.push(y-1);
}
if(x<n&&ditu[x+1][y]==0)
{
uex.push(x+1);
uey.push(y);
}
if(y<n&&ditu[x][y+1]==0)
{
uex.push(x);
uey.push(y+1);
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(ditu[i][j]==-1)
{
printf("0 ");
continue;
}
if(ditu[i][j]==0)
{
printf("2 ");
continue;
}
printf("1 ");
}
printf("\n");
}
return 0;
}
// 不知可不可以
by Xie_BR @ 2018-09-06 20:18:24
我也是80分,第四个点,同求助^_^
```python
#bfs
from collections import deque
s=deque()
n=int(input())
square=[]
dire=[[-1,0],[1,0],[0,1],[0,-1]]
for i in range(n):
square.append(list(map(int,input().split())))
#找到一个0在圈内
def find(n):
for i in range(n):
if 1 not in square[i] or square[i].count(1)<2:
continue
for j in range(n):
if square[i][j]==1:
continue
flag = 0
#向左
left=j
# print(i,j)
while left>0:
if square[i][left-1]>0:
flag+=1
break
left-=1
# print(i,j,flag)
#向右
right=j
while right < n-1:
if square[i][right + 1] > 0:
flag += 1
break
right+=1
# print(i,j,flag)
if flag==2:
a,b=i,j
return a,b
a,b=find(n)
s.append([a,b])
square[a][b]=2
while len(s)>0:
c,d=s.popleft()
for i in range(4):
e=c+dire[i][0]
f=d+dire[i][1]
if e<0 or e>n-1 or f <0 or f>n-1 or square[e][f]==2 or square[e][f]==1:
continue
s.append([e,f])
square[e][f]=2
for i in range(n):
for j in range(n-1):
print(square[i][j],end=" ")
print(square[i][-1])
```
by 风水戏诸侯 @ 2019-01-15 13:09:57