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 在图中寻找循环
在没有树边的无向图中循环?
循环无向图中的所有可能路径