0分求助,样例过了

P1506 拯救oibh总部

``` #include <iostream> using namespace std; char a[600][600]; int dx[4]={-1,1,0,0}; int dy[4]={0,0,-1,1}; int n,m,ans=0; void dfs(int x,int y){ if (x<=0||x>n||y<=0||y>m||a[x][y]=='*') return; a[x][y]='*'; for (int i=0;i<4;i++) { dfs(x+dx[i],y+dy[i]); } } int xx,yy; int main(){ 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<=m;i++){ dfs(1,i); dfs(n,i); } for(int i=1;i<=n;i++){ dfs(i,1); dfs(i,m); } for (int i=1;i<=n;i++){ for (int j=1;j<=m;j++){ if (a[i][j]=='0') ans++; } } cout<<ans; } ``` 没找出错哪,贴个dfs代码仅供参考
by zero_egg @ 2023-10-09 22:24:19


我第一遍和你错的一样 ``` #include<iostream> #include<cstdio> #include<cmath> #include<algorithm> using namespace std;char a[501][501]; int cnt,n,m,x1[4]={1,-1,0,0}; int y2[4]={0,0,-1,1}; void dfs(int x,int y) { if(x<0||y<0||x>n+1||y>m+1||a[x][y]=='*') return;这里要不能小于0 a[x][y]='*'; for(int i=0;i<=3;i++) { dfs(x+x1[i],y+y2[i]); } } int main() { cin>>n>>m; 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')cnt++; } } cout<<cnt; return 0; } ```
by 12_Victory_04 @ 2023-10-18 16:13:28


谢谢楼上2位大佬的帮忙。有礼了!~
by levy2011 @ 2023-10-18 17:57:31


已AC,谢谢大佬指点!
by levy2011 @ 2023-11-04 11:00:49


|