输出不了ans,求调,玄关

P1451 求细胞数量

这题要用dfs去会更简单。 这题是一道联通块 献上代码 ```cpp #include<bits/stdc++.h> using namespace std; int a[105][105]; int m,n,cnt=0; int dx[4]={0,0,1,-1}; int dy[4]={1,-1,0,0}; void dfs(int x,int y) { a[x][y]=0; for(int i=0;i<4;i++) { int nx=x+dx[i],ny=y+dy[i]; if(nx>0&&nx<=n&&ny>0&&ny<=m&&a[nx][ny]!=0)dfs(nx,ny); } } int main() { cin>>n>>m; for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%1d",&a[i][j]); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(a[i][j]==0) { continue; } dfs(i,j); cnt++; } } cout<<cnt; return 0; } ```
by zyhe2013 @ 2024-03-29 14:46:06


@[jinxc](/user/865834) 求关
by zyhe2013 @ 2024-03-29 14:46:48


@[jinxc](/user/865834) ```cpp #include <bits/stdc++.h> using namespace std; char a[101][101]; int vis[101][101]; int dd[4][2] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}}; int n, m, ans = 0, head = 0, tail = 0; struct node { int x, y; } q[114514]; void bfs(int x, int y) { ans++; head = 1; tail = 1; q[tail].x = x; q[tail++].y = y; while (head <= tail) { vis[q[head].x][q[head].y] = ans; for (int i = 0; i < 4; i++) { int xx = dd[i][0] + q[head].x; int yy = dd[i][1] + q[head].y; if (xx>=1 && xx<=n && yy>=1 && yy<=m && a[xx][yy] != '0' && vis[xx][yy] == 0) { q[++tail].x = xx; q[tail].y = yy; } } head++; } } int main() { cin >> n >> m; memset(vis, 0, sizeof(vis)); 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++) { for (int j = 1; j <= m; j++) { if (vis[i][j] == 0 && a[i][j] != '0') { bfs(i, j); // cout << 1 << endl; } } } // for(int i=1;i<=n;i++) // { // for(int j=1;j<=m;j++) // { // cout<<vis[i][j]; // } // cout<<'\n'; // } cout << ans; return 0; } ```
by hanruchen_rainbowcat @ 2024-03-29 15:00:27


@[jinxc](/user/865834) 手写队列炸了,vis的操作也炸了
by hanruchen_rainbowcat @ 2024-03-29 15:01:02


@[zyhe2013](/user/905073) 感谢,已关%%%
by Wuski @ 2024-03-29 22:38:53


@[hanruchen_rainbowcat](/user/533160) 感谢指出错误,已关%%%
by Wuski @ 2024-03-29 22:39:21


@[zyhe2013](/user/905073) 我们老师让我用bfs
by Wuski @ 2024-03-29 22:40:00


|