要不看下我的代码,我记得这是我人生中第一次只靠自己一遍过的出来的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