请看图片:http: //i.stack.imgur.com/NPUmR.jpg
我有一个无向图,其中包含一个或多个连接的子图。该图由一组有序的连接顶点对定义。最多可以有 300 个顶点。该图是平面的。
我需要识别多边形,如图所示。单独多边形中的每个彩色区域。粗略的启发式可能是多边形是图中闭合边缘循环(循环)之间的“封闭区域”。在类似的帖子中建议可以使用深度优先遍历和标记访问的顶点来识别循环。
但是,我不确定在此之后如何进行以获得所需的输出,如图所示。
要求 :
i) 多边形不得重叠或相交。即:Cycle ABFHDCA 不是有效的多边形,因为它会与 Polygon FHGE 重叠。循环 ABFEGHDCA 是一个有效的多边形。
ii) 多边形可能有 3 条或更多条边,并且多边形必须以图的边为界。XYZ 是一个有效的多边形,尽管与图形的其余顶点断开连接。
iii) 像 K 和 L(即叶子)这样的顶点不构成多边形的一部分。我们不关心边缘 JK。
更新: iv)在图中边不交叉。两条边唯一可以相遇的地方是一个顶点。前面的阶段/算法保证是这种情况。
问题:
我是否在 DF 遍历找到循环方法的正确轨道上?DF 遍历是否会给我在这种情况下需要考虑的所有(简单)循环,尤其是 XYZ 与图表的其余部分断开连接?
是否有解决此问题的现有替代算法?
补充说明:
a)我在用更具体的计算几何术语定义这个问题时遇到了麻烦,所以我坚持在无向图中寻找多边形。我必须承认,我学习图论已经有好几年了。我现在正在刷它。
b)对此的解决方案似乎不像凹/凸壳算法。我们谈论的是一组连接的边——真正的多边形,而不仅仅是需要包含的点云。
c)上面的例子是我可以在短时间内想出的。我认为它涵盖了大多数“边缘”案例(双关语):)
类似的解决方案
- 我找到了一个类似的帖子,但接受的解决方案似乎没有为此示例生成正确的周期。
提前致谢!