为了账号安全,请及时绑定邮箱和手机立即绑定

在具有自有边的有向多图中查找所有循环

在具有自有边的有向多图中查找所有循环

Go
元芳怎么了 2022-08-15 15:50:13
是否有任何算法的实现,在Golang中具有自边缘的有向多图中查找所有周期?我发现约翰逊算法是有向图的最佳解决方案,并且实现是在gonum中给出的,但它仅适用于有向图(而不是多图),并且不支持自边缘(实际上gonum中的有向图不支持自边缘)。有没有一个简短/聪明的黑客,我可以在gonum中做约翰逊的工作与自我边缘的定向多图?还是在Golang中还有其他实现?可以做的一件事是在自边缘之间创建一个虚拟节点,并在同一对节点之间的重复边缘之间创建一个虚拟节点。这将删除所有自体边,图形将是有向的,我可以在这里使用约翰逊的。但是有更好的方法吗?
查看完整描述

1 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

  • 自边缘 :您只需要扫描图形的每个节点并检查是否存在自我边缘。如果有 :添加到循环列表X -> X

  • 多图:第一种算法将生成路径作为顶点序列。当您有此列表时,请迭代从 到 的所有可能的边缘,然后从 到 的所有可能的边缘,依此类推...X1 -> X2 -> X3 -> ...X1X2X2X3


  • “聪明”的黑客:从你的多图中,创建一个新的图,其中的边缘也显示为顶点:GG2G

# 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


查看完整回答
反对 回复 2022-08-15
  • 1 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号