你的bfs写的有些问题
by Ted_LightningTechG_ @ 2023-10-06 12:03:06
首先第一点,bfs不需要递归
by Ted_LightningTechG_ @ 2023-10-06 12:03:51
bfs递归写,%%%
by 初星逝者 @ 2023-10-06 12:03:53
其次的话,你要建一个vis数组用来存放你当前这个位置有没有搜过
by Ted_LightningTechG_ @ 2023-10-06 12:04:47
@[初星逝者](/user/376679) 无语
by Ted_LightningTechG_ @ 2023-10-06 12:04:57
@[zhangzhixuan1](/user/818329) 算了,我还是给你std吧![](//图.tk/g5!25)
by Ted_LightningTechG_ @ 2023-10-06 12:05:48
@[FIGHTINGTEDDY](/user/518500) ?
by 初星逝者 @ 2023-10-06 12:06:03
@[FIGHTINGTEDDY](/user/518500) 明显不需要,他直接更改数组的,哪要vis?
by 初星逝者 @ 2023-10-06 12:07:03
```
#include<bits/stdc++.h>
using namespace std;
struct node{
int x;
int y;
}q[40005];
int n,m,sum;
bool vis[115][115];
char a[115][115];
int dx[8]={-1,-1,-1,0,1,1,1,0};
int dy[8]={-1,0,1,1,1,0,-1,-1};
int bfs(int x,int y){
memset(q,0,sizeof(q));
q[1].x=x,q[1].y=y;
int head=1,tail=1,s=0;
while(head<=tail){
int fx=q[head].x,fy=q[head].y;
for(int i=0;i<8;i++){
int nx=fx+dx[i],ny=fy+dy[i];
if(nx<1||nx>n||ny<1||ny>m)continue;
if(vis[nx][ny]||a[nx][ny]=='.')continue;
s++;
q[++tail].x=nx,q[tail].y=ny;
vis[nx][ny]=true;
}
head++;
}
return s;
}
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<=n;i++){
for(int j=1;j<=m;j++){
if(!vis[i][j]&&a[i][j]=='W'){
bfs(i,j);
sum++;
}
}
}
cout<<sum;
return 0;
}
by Ted_LightningTechG_ @ 2023-10-06 12:07:24
@[初星逝者](/user/376679) 我的问题
by Ted_LightningTechG_ @ 2023-10-06 12:07:42