c_cpp 检测无向图中的循环

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 检测无向图中的循环相关的知识,希望对你有一定的参考价值。

// https://www.geeksforgeeks.org/detect-cycle-undirected-graph/
#include <bits/stdc++.h>
using namespace std;

class graph {
    int v;
    list<int> *adj;
public:
    graph (int v) {
        this->v= v;
        adj= new list<int> [v];
    }
    void addEdge (int u, int w) {
        adj[u].push_back(w);
        adj[w].push_back(u);
    }
    bool isCyclic();
    bool isCyclicUtil (int , bool [], int );
};
bool graph::isCyclicUtil (int s, bool visited[], int parent) {
    visited[s]= 1;
    list<int>::iterator i;

    for (i= adj[s].begin(); i!= adj[s].end(); ++i) {
        if (visited[*i]==0 && isCyclicUtil(*i, visited, s))
            return 1;
        else if (!visited[*i] && *i != parent)
            return 1;
    }
    return 0;
}
bool graph::isCyclic() {
    bool visited[v]= {0};

    for (int i=0; i<v; i++)
        if (visited[i]== 0 && isCyclicUtil (i, visited, -1))
            return 1;
    return 0;
}

int main() {
    graph g2(3);
    g2.addEdge(0, 1);
    g2.addEdge(1, 2);
    g2.isCyclic()? cout<< "cyclic!\n": cout<< "acyclic!\n";
}

以上是关于c_cpp 检测无向图中的循环的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp needtodo在无向图中找到两个给定节点之间的第二条最短路径

在彩色图中查找具有单个不同颜色边的循环

循环有向图和无向图

为啥用 DFS 而不是 BFS 在图中寻找循环

在没有树边的无向图中循环?

循环无向图中的所有可能路径