gpt4 book ai didi

c# - Tarjan循环检测帮助C#

转载 作者:IT王子 更新时间:2023-10-29 04:09:48 25 4
gpt4 key购买 nike

这是 tarjan 循环检测的有效 C# 实现。

算法可以在这里找到: http://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm

public class TarjanCycleDetect
{
private static List<List<Vertex>> StronglyConnectedComponents;
private static Stack<Vertex> S;
private static int index;
private static DepGraph dg;
public static List<List<Vertex>> DetectCycle(DepGraph g)
{
StronglyConnectedComponents = new List<List<Vertex>>();
index = 0;
S = new Stack<Vertex>();
dg = g;
foreach (Vertex v in g.vertices)
{
if (v.index < 0)
{
strongconnect(v);
}
}
return StronglyConnectedComponents;
}

private static void strongconnect(Vertex v)
{
v.index = index;
v.lowlink = index;
index++;
S.Push(v);

foreach (Vertex w in v.dependencies)
{
if (w.index < 0)
{
strongconnect(w);
v.lowlink = Math.Min(v.lowlink, w.lowlink);
}
else if (S.Contains(w))
{
v.lowlink = Math.Min(v.lowlink, w.index);
}
}

if (v.lowlink == v.index)
{
List<Vertex> scc = new List<Vertex>();
Vertex w;
do
{
w = S.Pop();
scc.Add(w);
} while (v != w);
StronglyConnectedComponents.Add(scc);
}

}

注意 DepGraph 只是 Vertex 的列表。 Vertex 有一个代表边的其他 Vertex 的列表。 index 和 lowlink 也初始化为 -1

编辑:这是有效的...我只是误解了结果。

最佳答案

上面说的其实是对的,我没看懂什么是强连通分量。我期望该函数返回一个空的强连接组件列表,但它返回的是单个节点列表。

我相信以上内容有效。有需要的可以放心使用!

关于c# - Tarjan循环检测帮助C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6643076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com