给定无向图
图的数据结构是邻接表。
如何在O(n)复杂度内查找和打印简单循环(或打印没有这样的循环)?(如果存在循环,则输出应该是循环中包含的顶点列表。)
我知道如何在O(n)复杂度内查找循环,互联网上也有指南。我的问题是如何打印它。
这是我尝试做的:
graph G(V,E)
。在 IT 技术中使用。|E| = m, |V| = n
图的数据结构是邻接表。
如何在O(n)复杂度内查找和打印简单循环(或打印没有这样的循环)?(如果存在循环,则输出应该是循环中包含的顶点列表。)
我知道如何在O(n)复杂度内查找循环,互联网上也有指南。我的问题是如何打印它。
这是我尝试做的:
DFS-CheckCycle ( Graph G)
{
p[] <- null //parent array
foreach v in V
Color[u] <- white
foreach v in V
{
if (Color[u] = white)
Visit(u)
}
}
Visit(Vertex u)
{
bool Cycle <- false;
Color[u] <- gray
foreach v in Adj[u]
{
p[v] <- u
if (Color[v] = white)
Visit(v);
else if (Color[v] = gray)
{
Cycle <- true;
break;
}
}
if(!Cycle)
print "No Cycle"
else
PrintCycle(v,u)
}
PrintCycle(Vertex v, Vertex u)
{
if(v = u)
print v;
else
{
print v;
PrintCycle(p[v], u);
}
}
请记住,它需要是 O(n)
的复杂度。
我的 PrintCycle 函数没有打印所有的顶点。
我需要一些帮助来打印我找到的循环中的顶点。