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

Par*_*s P 12 algorithm implementation 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步中究竟需要做什么,或者给我另一种算法来解决我的问题?

Kha*_*d.K 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
Run Code Online (Sandbox Code Playgroud)

算法:

初始化

[LIST] = { }

LIST[A] = { A }
LIST[B] = { B }
LIST[C] = { C }
LIST[D] = { D }
LIST[E] = { E }

DISTANCE = 0

SOLVED = FALSE

SOLUTION = { }
Run Code Online (Sandbox Code Playgroud)

搜索

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
Run Code Online (Sandbox Code Playgroud)