广度优先搜索陷入无限循环
Breadth first search stuck in infinite loop
我正在尝试实现广度优先搜索算法,但由于某些原因,它陷入了无限循环。
我尝试过通过输出各种值来调试它,但仍然没有成功。
我的Bfs代码
int s=0;
bool vis[n];
int dist[n];
for(int i=0;i<n;i++){
vis[i]=false;
dist[i]=INT_MAX;
}
dist[s]=0;
vis[s]=true;
q_push(s);
while(!q_isEmpty()){
int u = queu[0];
for(int v=0;v<n;v++){
if(adjMat[u][v]==1){
if(vis[v]==false){
vis[v] == true;
dist[v]=dist[u]+1;
q_push(v);
cout<<v;
}
}
}
q_pop();
}
我的队列被全局声明为其代码
vector <int> queu;
void q_push(int d){
queu.insert(queu.end(),d);
}
void q_pop(){
queu.erase(queu.begin());
}
bool q_isEmpty(){
return queu.empty();
}
我把邻接矩阵作为它的代码的输入。
int n;
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
int temp;
cin>>temp;
adjMat[i][j]=temp;
}
}
更改此项:
vis[v] == true;
到此:
vis[v] = true;
由于您想将相邻节点v
标记为已访问,因此通过为其赋值true,您错误地使用了比较运算符而不是赋值运算符,因此您会一次又一次地访问已经遍历的节点,从而进入无限循环。。
PS:不是无限循环的原因,但正如@PaulMcKenzie所评论的,你可以/应该使用std::queue
。
相关文章:
- 提升图广度优先搜索前置编译错误
- 使用openmp实现并行广度优先搜索
- 广度优先搜索陷入无限循环
- 并行化广度优先搜索
- 如何使用C 中的广度优先搜索解决8个式嘴问题
- 如何使用广度优先搜索确定是否可以在有向图中到达顶点
- 修改广度优先搜索算法以记住矩阵中的最短路径
- 如何实现广度优先搜索
- 图论:广度优先搜索
- 广度优先搜索未找到正确的路径
- 有向图中的广度优先搜索
- 使用Boost图库从多个来源进行广度优先搜索
- 如何用C++编写广度优先搜索的代码
- C++以广度优先搜索的方式查找多个数组中元素的所有组合
- 广度优先搜索:有向图
- 邻接列表,用于创建图形和广度优先搜索 (BFS) 和 Fepth First Search (DFS)
- 广度优先搜索中的 C++ 迭代器和指针用法
- 广度优先搜索输入
- 广度优先搜索返回错误的金额
- 是否可以将boost库的广度优先搜索算法应用于矩阵