64分,求助大佬

P1162 填涂颜色

你这个搜索方法会有遗漏,比如下面这个形状: ``` 00000000 00111000 00101111 00100001 11100001 10000001 10111001 11101111 ``` 如果按照你的方法来做,最下面一排中间的那个0也会变成2
by weifeng_yuhuo @ 2024-01-27 09:18:51


可以用深搜做
by yangjunrui @ 2024-01-27 09:39:43


试试这个: ```cpp #include <bits/stdc++.h> using namespace std; struct st{ int x,y; }; int a[35][35]; int n; int dx[8]= {1,-1, 0, 0}; int dy[8]= {0,0,1,-1}; int fun(int x2,int y2) { int x3,y3; if (x2<0||y2<0||x2>n+1||y2>n+1) return 0; if (a[x2][y2] !=0) return 0; a[x2][y2]=3; for (int i=0;i<4;i++) { x3=x2+dx[i];y3=y2+dy[i]; if (a[x3][y3] ==0) { fun(x3,y3); } } } int main() { st b0; cin>>n; for (int i=1;i<=n;i++) { for (int j=1;j<=n;j++) { cin>>a[i][j]; } } fun(0,0); for (int i=1;i<=n;i++) { for (int j=1;j<=n;j++) { if (a[i][j]==3) cout <<"0 "; else if (a[i][j]==0) cout <<"2 "; else cout<<"1 "; } cout<<endl; } return 0; } ```
by qx_wangziyan @ 2024-01-27 10:05:55


全部re
by Kaaras @ 2024-01-29 10:19:31


```cpp #include<bits/stdc++.h> using namespace std; int dx[4]={-1,1,0,0}; int dy[4]={0,0,1,-1}; int n,a[10086][10086],b[10086][10086]; void dfs(int x,int y){ if(x<1 || x>n || y<1 || y>n || a[x][y]!=0) return; a[x][y]=1; for(int i=0;i<4;i++) dfs(x+dx[i],y+dy[i]); } int main() { scanf("%d",&n); for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ scanf("%d",&a[i][j]); if(a[i][j]==1) b[i][j]=-1; } } for(int i=1;i<=n;i++){ if(a[i][1]!=1) dfs(i,1); if(a[i][n]!=1) dfs(i,n); } for(int i=1;i<=n;i++){ if(a[1][i]!=1) dfs(1,i); if(a[n][i]!=1) dfs(n,i); } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(b[i][j]==-1) printf("1 "); else if(a[i][j]==0) printf("2 "); else printf("0 "); } printf("\n"); } return 0; } ```
by mouyulin @ 2024-02-01 09:36:36


感谢大佬
by Kaaras @ 2024-02-02 09:11:53


|