第二个测试点过不了 求大佬

P1162 填涂颜色

#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


|