@[ElonMask](/user/635004)
bfs初始要定义vis的,你定义一下试试。
by ikun_god @ 2024-02-02 14:44:17
话说为什么你第14行我本地报错了而且你干嘛遍历临点的临点,当然错的
by ikun_god @ 2024-02-02 14:48:44
建议你把`visit`化成`vis`,或者其他字符
by ikun_god @ 2024-02-02 14:51:11
@[ElonMask](/user/635004)
在吗?
by ikun_god @ 2024-02-02 14:51:56
你这里的第9行`while (q.front() != make_pair(n, m))`应当判断队列是否为空。
还有第24和25行的`q.push({tx, ty});`前边应该在把这里`(x,y)`的vis变为一,放置死循环
by ikun_god @ 2024-02-02 14:56:40
你RE的点应该就是这里(话说这种随便造个数据就能发现问题吧)
by ikun_god @ 2024-02-02 14:58:51
@[ElonMask](/user/635004)
by ikun_god @ 2024-02-02 14:59:06
@[ElonMask](/user/635004)
补:判断队列是否为空的函数为`队列名.empty()`是空才返回1,所以wille中的条件要加!
by ikun_god @ 2024-02-02 15:03:01
@[ElonMask](/user/635004)
话说你这个代码我为什么在本地跑不了。
by ikun_god @ 2024-02-02 15:11:15
AC代码:
```
#include <bits/stdc++.h>
using namespace std;
char a[4000][4000];
struct node{
int x,y,temp;
};
bool vis[4000][4000];
int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int n,m;
void bfs(int x,int y){
queue<node> q;
vis[x][y]=1;
q.push({x,y,0});
while (!q.empty()){
x=q.front().x;
y=q.front().y;
int temp=q.front().temp;
q.pop();
for (int i=0;i<4;++i){
int xx=x+dir[i][0];
int yy=y+dir[i][1];
if (xx<1 || xx>n || yy<1 || yy>m){
continue;
}
if (vis[xx][yy]){
continue;
}
if (a[xx][yy]=='0'){
continue;
}
vis[xx][yy]=1;
q.push({xx,yy,temp+1});
}
}
}
int main(){
cin>>n>>m;
for (int i=1;i<=n;++i){
for (int j=1;j<=m;++j){
cin>>a[i][j];
}
}
int cnt=0;
for (int i=1;i<=n;++i){
for (int j=1;j<=m;++j){
if (vis[i][j]==0 && a[i][j]!='0'){
cnt++;
bfs(i,j);
}
}
}
cout<<cnt<<endl;
return 0;
}
```
by ikun_god @ 2024-02-02 15:32:08