全部RE了

P1162 填涂颜色

额——我也是小白,不会调代码,这是我的AC代码,要不你拿去看看? ``` #include <bits/stdc++.h> using namespace std; int vis[35][35],dt[35][35]; int n; int fx[4]={0,0,-1,1}; int fy[4]={1,-1,0,0}; void dfs(int x,int y){ vis[x][y]=1; for(int i=0;i<4;i++){ int tx=x+fx[i]; int ty=y+fy[i]; if(tx>=1&&tx<=n&&ty<=n&&ty>=1&&vis[tx][ty]==0&&dt[tx][ty]==0){ dfs(tx,ty); } } } int main(){ cin >> n; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cin >> dt[i][j]; } } for(int i=1;i<=n;i++){ if(dt[i][n]==0) dfs(i,n); if(dt[i][1]==0) dfs(i,1); if(dt[1][i]==0) dfs(1,i); if(dt[n][i]==0) dfs(n,i); } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(vis[i][j]==1) cout << 0 << " "; else if(dt[i][j]==1) cout << 1 << " "; else cout << 2 << " "; } cout << endl; } return 0; } ```
by LiJinwen20130617 @ 2024-08-17 17:53:10


会不会是要四周全搜索一遍,就像这样: ``` for(int i=1;i<=n;i++){ if(dt[i][n]==0) dfs(i,n); if(dt[i][1]==0) dfs(i,1); if(dt[1][i]==0) dfs(1,i); if(dt[n][i]==0) dfs(n,i); } ``` 我也是猜的哈,你要不试试改改?
by LiJinwen20130617 @ 2024-08-17 17:58:50


本地debug:输出正确,返回值有问题(无效访问) 代码阅读题:dfs没加有效判断 是否到达边缘。 不应该啊,~~应该直接崩溃的啊~~。 要不加个有效判断? ```cpp #include <bits/stdc++.h> #define int long long using namespace std; typedef unsigned long long ull; typedef long long ll; int n,m; int a[33][33]; bool vis[33][33]; int dx[4]={-1,1,0,0},dy[4]={0,0,-1,1}; void dfs(int x,int y) { vis[x][y]=1; for(int i=0;i<4;i++) { if (x+dx[i]>=0 && x+dx[i]<=n+1 && y+dy[i]>=0 && y+dy[i]<=n+1 && a[x+dx[i]][y+dy[i]]==0 && vis[x+dx[i]][y+dy[i]]==0) { dfs(x+dx[i],y+dy[i]); } } return ; } signed main() { cin>>n; m=n; memset(a,0,sizeof(a)); memset(vis,0,sizeof(vis)); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cin>>a[i][j]; } } dfs(0,0); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(a[i][j]==0&&vis[i][j]==0) { cout<<2<<" "; } else { cout<<a[i][j]<<" "; } } cout<<endl; } return 0; } ```
by BenLin2012 @ 2024-09-29 11:30:03


|