80分dfs求调

P1596 [USACO10OCT] Lake Counting S

要不看下我的代码,我记得这是我人生中第一次只靠自己一遍过的出来的bfs ``` #include <bits/stdc++.h> const int dx[]={0,0,-1,1,-1,1,1,-1}; const int dy[]={-1,1,0,0,-1,1,-1,1}; using namespace std; struct aaa{ int x,y; }; int sum,m; char maze[101][101]; queue<aaa>q; int main(){ int n; cin>>n>>m; for (int i=1;i<=n;i++){ for (int j=1;j<=m;j++){ cin>>maze[i][j]; } } for (int i=1;i<=n;i++){ for (int j=1;j<=m;j++){ if (maze[i][j]=='W'){ q.push({i,j}); while(!q.empty()){ int x=q.front().x,y=q.front().y; q.pop(); for (int i=0;i<8;i++){ int nx=x+dx[i],ny=y+dy[i]; if (nx>=1&&nx<=n&&ny>=1&&nx<=n&&maze[nx][ny]=='W'){ maze[nx][ny]='.'; q.push({nx,ny}); } } } sum++; } } } cout<<sum; return 0; } ``` ~~可能有点难看懂~~ 不过不知道dfs能不能过,我去康康
by BensonChen @ 2023-10-13 15:55:50


@[AVLw](/user/1021623) n和m反了,这样写过了 ```cpp #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <cstdio> using namespace std; const int N = 111; int n, m; char g[N][N]; void dfs(int i, int j) { if (i < 0 || j < 0 || i >= n || j >= m || g[i][j] != 'W') return; g[i][j] = '.'; dfs(i - 1, j); dfs(i + 1, j); dfs(i, j + 1); dfs(i, j - 1); dfs(i + 1, j + 1); dfs(i - 1, j - 1); dfs(i + 1, j - 1); dfs(i - 1, j + 1); } int main() { scanf("%d %d", &n, &m); int ans = 0; for (int i = 0; i < n; i++) { scanf("%s", g[i]); } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (g[i][j] == 'W') { ans++; dfs(i, j); } } } printf("%d\n", ans); return 0; } ```
by liaiyang @ 2023-10-13 16:23:41


6,原来你递归里的n,m也写反了,我只顾着在main函数里debug了。。。找了半天查不出来
by BensonChen @ 2023-10-13 16:33:36


@[BensonChen](/user/745442) 辛苦了 我傻了
by AVLw @ 2023-10-13 17:00:18


@[liaiyang](/user/783170) 感谢 关注了 我竟然看不出来 有什么调试技巧
by AVLw @ 2023-10-13 17:01:08


@[BensonChen](/user/745442) 其实我第一眼就觉得dfs好写
by AVLw @ 2023-10-13 17:01:29


编译器删Warning,坏文明(
by liaiyang @ 2023-10-13 17:07:20


@[AVLw](/user/1021623) 就瞎调,代码顺一遍,思路顺一遍,然后找几组小数据自己手模一下代码,给个关注(
by liaiyang @ 2023-10-13 17:07:54


@[liaiyang](/user/783170) 当然关注 我早已关注 只是没说
by AVLw @ 2023-10-13 17:18:54


|