80分,无语。。。

P1162 填涂颜色

#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


|