【问题标题】:algorithm - Path finding through a specific vertexalgorithm - 通过特定顶点的路径查找
【发布时间】:2020-05-03 20:37:16
【问题描述】:

我正在寻找一种方法来找到一条从源顶点 (S) 到目标顶点 (D) 的无环路径(最好是最短路径,但不一定),该路径穿过另一个特定顶点 (X)图表。

现在,在你指出我之前 Finding shortest path between pass through a specific vertex 我想说这个解决方案忽略了从 S 到 X 的最短路径已经包含 D 的情况,这是我应用这个算法的可能场景。在这种情况下,你会如何解决这个问题?

我尝试的是在 Yen 的 K 最短路径算法的结果中寻找此类路径的天真尝试。但我希望有一种更有效、更确定的方法来做到这一点。

再次指出,我不一定要寻找从 S 到 D 通过 X 的最短路径,而只是寻找任何无环路径,尽管最短路径会更好。

【问题讨论】:

  • 让别人给你一个实现对于 Stack Overflow 来说是题外话。
  • 我投票决定将此问题作为离题结束,因为在没有尝试的情况下寻求答案

标签: python algorithm graph-theory dijkstra path-finding


【解决方案1】:

基本概念很简单;然后你就可以适应在最短的剩余路径上循环进出X 的情况。

  • 从图中删除D
  • 找到P1,从SX 的最短路径。
  • D 恢复到图表中。
  • 删除P1中的所有节点。
  • 找到P2,从XD 的最短路径。
  • 返回P1 + P2

这就是解决方案的要点。

注意:您可能会发现删除P1 会产生一个没有通往 D 的剩余路径的子图。在这种情况下,您将需要一个动态规划解决方案来搜索上述想法,但是有回溯和另一种搜索P1候选人的方法。

当您第一次找到P1 时,请检查您将要使用的节点不会在第二段行程中将XD 隔离开来。这将为您提供更快的搜索算法。

开始就够了吗?


适应的需要来自这样一个案例—— 考虑图表

src  dst
 S    1, 2
 1    X, D
 2    D
 X    1

你的部分路径是

S -> 1 -> X
S -> 2 -> 3 -> X
X -> 1 -> D
and, incidentally,
S -> 1 -> D

当您运行最短路径搜索时,您会得到路径 S 1 X 1 D,但由于循环而被拒绝。当你实现我的第一个修改时——删除节点1 尝试查找路径X to D 时,没有剩余路径。

算法需要有备份能力,拒绝路径X 1 D去寻找X 2 3 D。这是从描述中看不出来的编码。

这是一个心理练习:是否可以构建一个图,其中 每个 最短路径(S to XX to D)将另一个终端节点与 X 隔离开来?在我上面的例子中,你可以简单地切换过程:当S to X路径隔离D,然后重新开始:先找到X to D,删除节点1,然后然后找到@剩余图中的 987654352@。 你能找到这个开关也不起作用的图表吗?

如果没有,您有一个直接的解决方案。如果是这样,您需要处理更复杂的情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    相关资源
    最近更新 更多