WA0分求助,思路没问题的啊

P1506 拯救oibh总部

有两个主要错误 1. 洪水是从四面八方来的,因而要写成 ```cpp for(int i=1;i<=n;i++) if(a[i][1]=='0')dfs(i,1); for(int i=1;i<=n;i++) if(a[i][m]=='0')dfs(i,m); for(int i=1;i<=m;i++) if(a[1][i]=='0')dfs(1,i); for(int i=1;i<=m;i++) if(a[n][i]=='0')dfs(n,i); ``` 2.将```a[nx][ny]='*';```放到```for```循环的外面,因为会出现四周无法更新成```*```的情况
by 小小蒲公英 @ 2023-11-14 19:51:43


@[小小蒲公英](/user/392816) 第二点不是很理解.
by lhs_chris @ 2023-11-14 19:56:32


@[lhs_chris](/user/544007) Hack: ``` 5 5 *0*** ***** ***** ***** ***** ```
by 小小蒲公英 @ 2023-11-14 20:08:15


AC CODE: ```cpp #include<bits/stdc++.h> #define ll long long using namespace std; const int N=1e5+10; const int M=2023; const int inf=0x3f3f3f3f; int n,m,ans; char a[514][514]; int dx[]={0,0,1,-1}; int dy[]={1,-1,0,0},vis[514][514]; void dfs(int x,int y) { a[x][y]='*'; for(int i=0;i<4;i++) { int nx=x+dx[i]; int ny=y+dy[i]; if(nx>=1 and nx<=n and ny>=1 and ny<=m and a[nx][ny]=='0') { dfs(nx,ny); } } } int main() { #ifndef ONLINE_JUDGE freopen("P1506_1.in","r",stdin); freopen("1.txt","w",stdout); #endif cin>>n>>m; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cin>>a[i][j]; } } for(int i=1;i<=n;i++) if(a[i][1]=='0')dfs(i,1); for(int i=1;i<=n;i++) if(a[i][m]=='0')dfs(i,m); for(int i=1;i<=m;i++) if(a[1][i]=='0')dfs(1,i); for(int i=1;i<=m;i++) if(a[n][i]=='0')dfs(n,i); for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(a[i][j]=='0')ans++; cout<<ans; return 0; } ```
by 小小蒲公英 @ 2023-11-14 20:09:31


@[小小蒲公英](/user/392816) 谢谢大佬 **orz**
by lhs_chris @ 2023-11-15 20:49:21


|