[英]Algorithm for finding minimal cycles in a graph
我正在尋找一種給出圖形的算法,它返回其中的所有最小周期。
為了清楚我想要的東西,我需要算法從這個圖中准確地返回以下循環:
(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的算法,但我在第5頁的第4步試圖找出循環。
有人可以向我解釋在Horton算法的第4步中究竟需要做什么,或者給我另一種算法來解決我的問題?
本文介紹了幾何工具庫中使用的算法(我認為編寫的ic C ++)。 它基本上是一個修改后的DFS算法,增加了一些代數。 偽代碼很大,可以在這里發布,所以這里是鏈接:
http://www.geometrictools.com/Documentation/MinimalCycleBasis.pdf
我目前正致力於javascript實現。 如果您有興趣,可以在這里查看:
此算法僅適用於非加權圖:
例:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.