【问题标题】:Is there a graph algorithm that satisfies the following conditions?是否有满足以下条件的图算法?
【发布时间】:2014-03-08 08:16:55
【问题描述】:

N 个节点的图,其中 V = {0, 1, 2, ..., N}

该图的所有边都具有方向属性,例如向上、向北等,因此被引导。图比较稀疏。

顶点在三个维度上排列,边的长度都是相等的(即向左然后向上移动相当于向上然后向左移动,如果两条路径都可能的话)相邻的顶点可能有也可能没有边。

找到一系列以节点 J 结尾的定向移动,对于所有能够到达 J 的顶点,节点 J 都以 J 结束

所以,问题是:

这是什么类型的图形问题?这是如何分类的?我真诚地怀疑这个问题的独特性,并且在我用一个病态的算法杀死它之前,我正在寻求对其进行分类。

谢谢。

编辑:例如,8 个节点排列为立方体的角。假设沿着立方体的每条边有两条反平行的图边(两个方向的有向边)。因此,如果我们说 J 在立方体的西南角的“下”平面中,那么向下、向西、向南移动对于任何能够到达 J 的顶点都将到达 J,包括从 J 本身开始。

【问题讨论】:

    标签: algorithm graph


    【解决方案1】:

    我不确定我是否理解您的问题,但您为什么不使用从 J 开始的 BFS 并始终沿与边缘所暗示的相反方向移动?将找到 J 可以到达的任何顶点(就原始方向而言),并且您将获得一系列移动(以相反的顺序构建)。此外,您将获得的路径将是最短路径(因为所有边的权重均等)。

    时间复杂度尽可能低:O(E)(无论如何你都必须构建图)。

    关于你问的分类:这只是一个图搜索问题。

    【讨论】:

    • 是的,它是一个特殊的图,但所陈述的问题不依赖于这个事实,解决方案也不依赖于这个事实。你不能比 O(E) 更快地解决它,所以它是一个网格图这一事实是没有用的。
    • 实际上,并不是你想要路径——你想要一系列的移动(例如左、右、上、左),从每个可以到达 J 的顶点到达 J。无效的移动给定的顶点(如果顶点只有左和上,并且您尝试向右移动)被消耗并忽略 - 它们不会影响位置。
    • 所以,这种方法并不能直接解决问题,因为可以到达 J 的每个顶点都有一个唯一的路径 - 从任何顶点解决到达 J 的路径在执行时必然会有“死”动作一些顶点 - 作为路径一部分的移动(例如向左移动)但由于没有从顶点向左移动的边,它们被忽略
    【解决方案2】:

    BFS 可用于将图反转到所有出边,但如果图中存在循环,那么评估它会很麻烦,所以我认为更简洁的方法是评估 强连接组件O(E) 中,然后将图减少到代表每个 SCC 的节点,然后在 J 对应的节点上的较新图上使用 BFS,并分别用 J 的 SCC 重建路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-17
      • 1970-01-01
      • 1970-01-01
      • 2020-05-12
      • 2013-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多