图中循环的联合

时间:2012-02-15 16:35:32

标签: c++ graph-theory

connected graph我有一组节点和边缘,我使用Dijkstra的算法来找到最短的闭合周期。我的周期相互连接(图中的小黑周期)。这意味着,对于2个周期,存在共同边缘。现在,我希望获得最外部循环(图中的红色循环),其中包含所有最短循环。我认为这是一种联盟。不确定。是否有任何特定的方法或算法方法从图中可用的最短闭合周期获得最外循环?如何实现这个?

在这里,我也在c ++下标记问题,因为大多数程序员都知道如何获得连接循环的并集,我也希望在c ++中实现它。提前谢谢你。

我已经编辑并上传了一个数字到我原来的帖子,因为其他人不清楚。

2 个答案:

答案 0 :(得分:2)

据我了解你的问题,你正试图找到连接planar graph的边缘最大面。有一种算法可以在Boost库中枚举平面图的面:Planar Face Traversal。您可以使用它来迭代图形的面并找到涉及最多边缘的面。

注意:

  • 这实际上只适用于平面图
  • 对于许多图形,解决方案不唯一,考虑正多面体的图形 - 这里,所有面具有相同的度数,因此没有明确定义哪一个是'外循环'你正在寻找

regular polyhedron graph example (Attribution: Tomruen at en.wikipedia)

  • 对于 2-connected 而不是 2-connected 的图表,“涉及大多数边缘的面”是什么意思不同。如果它不是2连接的,则会有“分支”到达某些面,并且根据定义,相同的面位于这样的分支的两侧。根据您的喜好/需要,您可以将这些边缘计入脸部长度或省略它们,得到不同的结果。

答案 1 :(得分:1)

Boost geometry似乎包含您需要的what,但它相当抽象,我需要一些时间来解决您的问题。显然,within可以应用于每对戒指,以确定周长。 或者更好,找到最大面积的戒指。