算法 - 通过特定顶点的路径查找
algorithm - Path finding through a specific vertex
我正在寻找一种方法来找到从源顶点 (S) 到经过某处另一个特定顶点 (X) 的目标顶点 (D) 的无环路径(最好是最短路径,但不一定)在图中。
现在,在你指出我之前
我想说这个解决方案忽略了从 S 到 X 的最短路径已经包括 D 的情况,这是我应用这个算法的可能场景。在那种情况下你会如何解决这个问题?
我尝试的是在 Yen 的 K 最短路径算法的结果中寻找这样的路径的幼稚尝试。但我希望有一种更有效和更确定的方法来做到这一点。
再次指出,我不一定要寻找从 S 到 D 通过 X 的最短路径,而是寻找任何无环路径,尽管最短路径会更好。
基本概念很简单;然后你就可以适应在最短剩余路径上循环进出 X
的情况。
- 从图中删除
D
。
- 求
P1
,从S
到X
的最短路径。
- 将
D
恢复到图形。
- 删除
P1
中的所有节点。
- 求
P2
,从X
到D
的最短路径。
- return
P1
+ P2
.
这就是解决方案的要点。
注意:您可能会发现删除 P1
会产生一个子图,其中没有到 D 的剩余路径。在这种情况下,您将需要一个动态规划解决方案搜索上面的想法,但使用回溯和另一种方法来搜索 P1
候选人。
当您第一次找到 P1
时,请检查您将要使用的节点不会在行程的第二段将 X
与 D
隔离。这将为您提供更快的搜索算法。
开始就够了吗?
适应的需要来自这样一个案例——
考虑图表
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
,因为循环而被拒绝。当您实施我的第一个修改时——在尝试查找路径 X to D
时删除节点 1
,没有剩余路径。
算法需要备份能力,拒绝路径X 1 D
寻找X 2 3 D
。这是从描述中不能立即看出的编码。
给你一个脑力练习:是否可以构造一个图,其中 每条 最短路径(S to X
和 X to D
)将另一个隔离开来来自 X
的终端节点?在我上面的示例中,您可以简单地切换过程:当 S to X
路径隔离 D
时,然后重新开始:首先找到 X to D
,删除节点 1
,然后 然后在剩下的图中找到S to X
。
你能找到这个开关不起作用的图表吗?
如果没有,您有一个即时的解决方案。如果是这样,您需要处理更复杂的情况。
我正在寻找一种方法来找到从源顶点 (S) 到经过某处另一个特定顶点 (X) 的目标顶点 (D) 的无环路径(最好是最短路径,但不一定)在图中。
现在,在你指出我之前
我尝试的是在 Yen 的 K 最短路径算法的结果中寻找这样的路径的幼稚尝试。但我希望有一种更有效和更确定的方法来做到这一点。
再次指出,我不一定要寻找从 S 到 D 通过 X 的最短路径,而是寻找任何无环路径,尽管最短路径会更好。
基本概念很简单;然后你就可以适应在最短剩余路径上循环进出 X
的情况。
- 从图中删除
D
。 - 求
P1
,从S
到X
的最短路径。 - 将
D
恢复到图形。 - 删除
P1
中的所有节点。 - 求
P2
,从X
到D
的最短路径。 - return
P1
+P2
.
这就是解决方案的要点。
注意:您可能会发现删除 P1
会产生一个子图,其中没有到 D 的剩余路径。在这种情况下,您将需要一个动态规划解决方案搜索上面的想法,但使用回溯和另一种方法来搜索 P1
候选人。
当您第一次找到 P1
时,请检查您将要使用的节点不会在行程的第二段将 X
与 D
隔离。这将为您提供更快的搜索算法。
开始就够了吗?
适应的需要来自这样一个案例—— 考虑图表
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
,因为循环而被拒绝。当您实施我的第一个修改时——在尝试查找路径 X to D
时删除节点 1
,没有剩余路径。
算法需要备份能力,拒绝路径X 1 D
寻找X 2 3 D
。这是从描述中不能立即看出的编码。
给你一个脑力练习:是否可以构造一个图,其中 每条 最短路径(S to X
和 X to D
)将另一个隔离开来来自 X
的终端节点?在我上面的示例中,您可以简单地切换过程:当 S to X
路径隔离 D
时,然后重新开始:首先找到 X to D
,删除节点 1
,然后 然后在剩下的图中找到S to X
。
你能找到这个开关不起作用的图表吗?
如果没有,您有一个即时的解决方案。如果是这样,您需要处理更复杂的情况。