我有一个定向平面图。因此我可以进行平面嵌入。 我有节点s和t,我想根据特定的嵌入找到s和t之间最左边的路径。
左边被定义为评论中描述的大卫。这意味着“左”是相对于无限面和顺时针/逆时针惯例定义的。如果循环p * rev(q)至少与相对于将无限面缠绕为任何其他面的逆时针方向,则路径q留有具有相同端点的路径p。
怎么可能? 我不知道如何告诉我的程序是否有另一个路径。我读了几篇论文,但他们没有解释如何实现这一点。 有人有想法吗?
答案 0 :(得分:0)
一个简单的平面图没有左右概念,它可以被镜像并旋转仍然是平面的。 你必须在图表中嵌入某种方向。
如果节点的最大外出度为2,则可以标记左边缘。 要找到最左边的路径,您可以从s开始进行深度优先搜索。 到达新节点时,请始终先使用左边缘。 当达到t时算法应该终止,留下最左边的路径。
在任意最大输出度的情况下,您可以用从左到右的数字增加标记边缘。
答案 1 :(得分:0)
正如user3568609所说,平面嵌入在球体上,没有 左右的自然定义。你需要选择一个无限的 面对第一;对于流算法(我认为这就是你所做的 实施),选择面部事件通常很方便 吨。让我们假设无限的面孔是偶然的。该 逆时针方向的半边缘到t现在有一个自然的差距在哪里 无限的面孔是。
.4 3| /2 .
\___|/___/
t 1
(infinite face)
以逆时针顺序访问半边,示例中为1到4。 这是深度优先遍历,因此我们充分探索1的连接 在2之前等等当你从另一个顶点到达另一个顶点v时 那么图片看起来像这样
|3 |2
\___|___/1
v
|
u
我再次标记了正确的遍历顺序。