Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ bfs使用相邻列表实现调试_C++_Queue_Graph Theory_Breadth First Search_Adjacency List - Fatal编程技术网

C++ bfs使用相邻列表实现调试

C++ bfs使用相邻列表实现调试,c++,queue,graph-theory,breadth-first-search,adjacency-list,C++,Queue,Graph Theory,Breadth First Search,Adjacency List,我正在尝试使用相邻列表调试bfs算法。它将正确打印到某个点,然后进入无限循环。我做了一些打印输出,发现它最终在图的前两个节点上循环。我不确定在我的代码中是哪里导致了这个问题。这是我得到的暗示,这是我最后的选择。如果有人能给我指出问题所在的正确方向,我会很有帮助 void bfsList(linkedList adjList[], int visit[], int j){ Queue queue(24); if (visit[j] == 0){ cout <&

我正在尝试使用相邻列表调试bfs算法。它将正确打印到某个点,然后进入无限循环。我做了一些打印输出,发现它最终在图的前两个节点上循环。我不确定在我的代码中是哪里导致了这个问题。这是我得到的暗示,这是我最后的选择。如果有人能给我指出问题所在的正确方向,我会很有帮助

void bfsList(linkedList adjList[], int visit[], int j){
    Queue queue(24);
    if (visit[j] == 0){
        cout << j+1 << endl;
        visit[j] = 1;
        queue.enqueue(j);
        while(!queue.isEmpty()){
            int k = queue.dequeue();
            //queue.print();
            for(int i=0;i<adjList[k].len();i++){
                if (visit[adjList[k].elementAt(i)-1]==0){
                    cout << adjList[k].elementAt(i) << endl;
                    visit[adjList[k].elementAt(i)-1] = 1;
                }
                if (!queue.isFull()){
                    queue.enqueue(adjList[k].elementAt(i)-1);
                }
            }
        }
    }
}
需要依赖于节点是否已被访问。 未经测试:

if (!queue.isFull() && !visit[adjList[k].elementAt(i)-1]){
                queue.enqueue(adjList[k].elementAt(i)-1);
            }

仅当未访问节点时排队

if (visit[adjList[k].elementAt(i)-1]==0){
    cout << adjList[k].elementAt(i) << endl;
    visit[adjList[k].elementAt(i)-1] = 1;

    if (!queue.isFull()){
    queue.enqueue(adjList[k].elementAt(i)-1);
    }

}

我还检查了邻接列表。这个列表没有什么问题,因为它与我在实现深度优先搜索时使用的列表相同。该图是从csv文件加载的。我在发布之前尝试过,它只打印出第一个节点,然后是第二个节点。我对bfs的理解是,尽管它可能访问节点。它需要排队以获取其相邻节点的数据。因此,如果我在那里进行检查,它将在打印第一个节点的相邻节点后停止。谢谢你们,我按照你们说的做了,但我在排队后更新了访问数组谢谢你们,我按照你们说的做了,但我在排队后更新了访问数组
if (visit[adjList[k].elementAt(i)-1]==0){
    cout << adjList[k].elementAt(i) << endl;
    visit[adjList[k].elementAt(i)-1] = 1;

    if (!queue.isFull()){
    queue.enqueue(adjList[k].elementAt(i)-1);
    }

}