广度优先搜索陷入无限循环[关闭]

问题描述 投票:0回答:1

我正在尝试实现广度优先搜索算法,但是由于某些原因,它陷入了无限循环。

我尝试通过输出各种值来调试它,但仍然没有成功。

我的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;
    }
}
c++ graph-theory breadth-first-search graph-traversal
1个回答
0
投票

更改此:

vis[v] == true;

对此:

vis[v] = true;

因为您要将相邻节点v标记为已访问,因此将其分配为true-您错误地使用了比较运算符而不是赋值运算符,因此您会一次又一次地保持并遍历已遍历的节点,进入无限循环。.

PS:不是无限循环的原因,但是正如@PaulMcKenzie所评论的,您可以/应该使用std::queue

© www.soinside.com 2019 - 2024. All rights reserved.