繁体   English   中英

简单的 DFS 陷入无限循环 C++

[英]Simple DFS stuck in an infinite loop c++

我正在尝试用 C++ 实现一个简单的 DFS,它有n个节点和k个边。

出于某种原因,它陷入了无限循环:

#include <bits/stdc++.h>
using namespace std;

#define pb push_back
#define MAXV 1000

void addEdge(vector<int> adj[], int u, int v){
    adj[u].pb(v);
    adj[v].pb(u);
}

void DFSUtil(int u, vector<int> adj[], vector<int>& visited){
    visited[u] = 1;
    cout << u << " ";
    for(int i = 0;i<adj[u].size();i++){
        if(visited[adj[u][i]] == 0){
            DFSUtil(u,adj,visited);
        }
    }
}

void DFS(vector<int> adj[], int N){
    vector<int> visited(N, 0);
    for(int u = 1;u<N;u++){
        if(visited[u] == 0){
            DFSUtil(u,adj,visited);
            cout << "\n";
        }
    }
}

int main(){
    int n,k,m,i,u,v;
    scanf("%d %d",&n,&k);

    vector<int> adj[n+1];

    for(i = 0;i<k;i++){
        scanf("%d %d",&u,&v);
        addEdge(adj,u,v);
    }

    // find connected components
    DFS(adj,n+1);


    return 0;
}

有人能指出我这段代码哪里出了问题吗?

要测试的示例输入:

4 3
1 2
2 3
1 4

在浏览完每个步骤之后,最后,我能够找到错误。

传递的值应该是DFSUtil(adj[u][i],adj,visited); 而不是DFSUtil(u,adj,visited); 它实际上一次又一次地调用同一个顶点,因此是无限循环。

void DFSUtil(int u, vector<int> adj[], vector<int>& visited){
    visited[u] = 1;
    cout << u << " ";
    for(int i = 0;i<adj[u].size();i++){
        int to = adj[u][i];
        if(visited[to] == 0){
            DFSUtil(to, adj, visited);
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM