【问题标题】:Algorithm for finding minimal cycles in a graph在图中找到最小循环的算法
【发布时间】:2013-05-28 02:19:58
【问题描述】:

我正在寻找一种算法,它给定一个图形,它返回其中的所有最小循环。
为了明确我想要什么,我需要该算法从该图中准确返回以下循环:
(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 步究竟需要做什么,或者给我另一种算法来解决我的问题吗?

【问题讨论】:

  • 如果您的图表未加权,DFS 不满足您的需求吗?
  • 我认为 Horton 的算法是基于加权图
  • 不,最短周期基础的霍顿算法适用于未加权图。引用论文“在本文中,图是有限的、无向的、没有循环或多重边的”
  • 您好,链接已失效,您还有其他来源吗?

标签: algorithm graph implementation


【解决方案1】:

本文描述了几何工具库中使用的算法(我认为是用 ic C++ 编写的)。它基本上是一种修改后的 DFS 算法,增加了一些代数。伪代码太大放在这里,所以这里是链接:

http://www.geometrictools.com/Documentation/MinimalCycleBasis.pdf

我目前正在研究 javascript 实现。有兴趣的可以看这里:

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

【讨论】:

【解决方案2】:

此算法仅适用于未加权图:

示例:

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

【讨论】:

  • 这个算法的来源是什么?有证据吗?
猜你喜欢
  • 2015-08-17
  • 1970-01-01
  • 1970-01-01
  • 2015-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-26
  • 2014-05-09
相关资源
最近更新 更多