簡體   English   中英

在圖中查找最小周期的算法

[英]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實現。 如果您有興趣,可以在這里查看:

http://jsbin.com/igujuz/8/edit

此算法僅適用於非加權圖:

例:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM