吃到彩虹糖,求调

P1596 [USACO10OCT] Lake Counting S

你的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


| 下一页