我正在寻找一种给出图形的算法,它返回其中的所有最小周期。
为了弄清楚我想要什么,我需要算法从这个图中准确地返回以下周期:
(1,3,6,1),(1,6,4,1),(1,4,2,1),(6,4,7,6),(2,4,7,2), (2,7,5,2)
我一直在寻找很多,我仍然无法弄清楚这个问题的名称。它是循环基础问题还是基本循环问题还是两者相同?
我找到了涉及MST或All-Pairs Shortest Paths的解决方案,但我无法理解它们中的任何一个。
我试图实现我在这里找到的Horton算法:Horton's Algorithm但是我在第5页的第4步试图找出循环。
有人可以向我解释在Horton算法的第4步中究竟需要做些什么,或者给我另一种算法来解决我的问题?
答案 0 :(得分:2)
本文介绍了几何工具库中使用的算法(我认为编写的ic C ++)。它基本上是一个修改后的DFS算法,增加了一些代数。伪代码很大,可以在这里发布,所以这里是链接:
http://www.geometrictools.com/Documentation/MinimalCycleBasis.pdf
我目前正在开发javascript实现。如果您有兴趣,可以在这里查看:
答案 1 :(得分:0)
此算法仅适用于非加权图:
示例:强>
INPUT GRAPH: A, B, C, D, E
A: B, C, E
B: A, C
C: A, B, D
D: C, E
E: A, D
<强>算法:强>
初始化
[LIST] = { }
LIST[A] = { A }
LIST[B] = { B }
LIST[C] = { C }
LIST[D] = { D }
LIST[E] = { E }
DISTANCE = 0
SOLVED = FALSE
SOLUTION = { }
搜索的
WHILE NOT SOLVED DO
DISTANCE = DISTANCE + 1
FOR EVERY LIST[X] IN [LIST]
TEMP = LIST[X]
LIST[X] = { }
FOR EVERY VERTEX IN TEMP
LIST[X] += NEIGHBORS(VERTEX)
END-FOR
END-FOR
FOR EVERY LIST[X] IN [LIST]
FOR EVERY VERTEX IN LIST[X]
IF VERTEX = X THEN
SOLUTION = { X, DISTANCE }
SOLVED = TRUE
END-IF
END-FOR
END-FOR
END-WHILE