【问题标题】:Finding all cycles in a Directed Multigraph with self edges在具有自边的有向多重图中查找所有循环
【发布时间】:2021-03-08 09:15:01
【问题描述】:

在 Golang 中是否有任何算法实现在具有自边的有向多重图中查找所有循环?我发现Johnson's algo 是有向图的最佳解决方案,gonum 中给出了一个实现,但它仅适用于有向图(而不是多重图)并且它不支持自边(实际上 gonum 中的有向图不要' t 支持自边缘)。我可以在 gonum 中做任何简短/聪明的 hack 来使 johnson 对具有自边缘的有向多重图的工作吗?或者 Golang 中还有其他实现吗?

可以做的一件事是在自身边和同一对节点之间的重复边之间创建一个虚拟节点。这将删除所有自我边缘,并且图形将是有向的,我可以在这里使用 Johnson's。但是有没有更好的办法呢?

【问题讨论】:

    标签: go graph cycle


    【解决方案1】:
    • self 边:您只需扫描图形的每个节点并检查是否存在自边。如果有:将X -> X 添加到循环列表中

    • 多重图:第一个算法将生成路径作为顶点序列X1 -> X2 -> X3 -> ...。当你有这个列表时,遍历从X1X2 的所有可能的边,然后从X2X3 的所有可能的边等等......


    • "clever" hack:从您的多重图 G,创建一个新图 G2,其中 G 也显示为顶点:
    # if A and B are connected     # create the following 3 vertices and
    # by a single edge in G :      # 2 edges in G2 :
    
       A ---w--> B                     A -> w -> B
    
    
    # if A and B are connected     # create the following 4 vertices and
    # by two edges in G :          # 4 edges in G2 :
    
         /--x--\                           /-> x --\
        A       B                        A          B
         \--y--/                           \-> y --/
    
    # etc ...
    

    然后在G2 上运行循环枚举,并根据需要调整输出。

    【讨论】:

      猜你喜欢
      • 2010-10-07
      • 1970-01-01
      • 2014-01-02
      • 2011-06-05
      • 1970-01-01
      • 2018-05-15
      • 1970-01-01
      • 2015-12-25
      • 1970-01-01
      相关资源
      最近更新 更多