【问题标题】:leftmost path in planar embedding平面嵌入中的最左边路径
【发布时间】:2014-05-06 12:43:38
【问题描述】:

我有一个有向平面图。因此我可以进行平面嵌入。 我必须节点 s 和 t,我想根据特定的嵌入找到 s 和 t 之间最左边的路径。

Left 定义为评论中描述的 David。这意味着“左”是相对于无限面和顺时针/逆时针约定定义的。如果循环 p*rev(q) 相对于缠绕无限面而言至少与任何其他面一样逆时针。

这怎么可能? 我不知道如何告诉我的程序是否留下了另一条路径。我读了几篇论文,但他们没有解释如何实现它。 有人有想法吗?

【问题讨论】:

  • 可能属于programmers.stackexchange.com
  • 你说的“左”是什么意思?
  • @iavr "Left" 是针对无限面和顺时针/逆时针约定定义的。如果循环 p*rev(q) 相对于缠绕无限面而言至少与任何其他面一样逆时针。
  • 如果这个问题被重新打开,请联系我(并且作为一个纯粹的战略性问题,不要用你碰巧使用的编程语言标记与语言无关的问题,因为你得到的新受众是更有可能将其搁置)。
  • @user3399670 你能指出你读过的论文吗?

标签: algorithm planar-graph


【解决方案1】:

正如 user3568609 所说,平面嵌入是在一个球体上,没有 左右的自然定义。你需要选择一个无限 先面对;对于流算法(我假设这就是你的 实现),通常很方便选择一个人脸事件到 s 或 吨。假设无限面与 t 相关。这 半边的逆时针顺序进入 t 现在有一个自然间隙,其中 无限的脸是。

.4  3| /2  .
 \___|/___/
     t  1

(infinite face)

按逆时针顺序访问半边,示例中为 1 到 4。 这是深度优先遍历,所以我们充分探索 1 的连接 在 2 之前,等等。当你从另一个顶点到达另一个顶点 v u 那么图片是这样的

|3   |2
 \___|___/1
     v
     |
     u

我再次标记了正确的遍历顺序。

【讨论】:

    【解决方案2】:

    一个简单的平面图没有左右的概念,它可以被镜像和旋转,仍然是平面的。 您必须在图表中嵌入某种方向。

    如果节点的最大出度为 2,则可以标记左边缘。 要找到最左边的路径,您可以从 s 开始进行深度优先搜索。 当你到达一个新节点时,总是先取左边缘。 当达到 t 时,算法应该终止,让你在最左边的路径。

    在任意最大出度的情况下,您可以用从左到右递增的数字标记边缘。

    【讨论】:

    • 是的,但是我怎么知道左边是什么。例如,我有一个顶点 v 的出边列表。我怎么知道哪一个是最左边的?
    • 如果 David Eisenstat 在他的评论中定义了“left”,那么这取决于两个端点 st,因此不能真正标记边缘。
    • @user3399670 它取决于上下文。我试图在暂停之前发布一个答案,其中 tl;dr 是选择与 t; 相关的无限脸;然后定义关于 t 的最右边。做一次 DFS 遍历;然后最右边是相对于当前遍历位置的传入半边定义的。 (s 的最左边 t 的最右边。)
    猜你喜欢
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多