如何找到 2 个顶点之间的所有可能路径

How to Find All possible paths between 2 vertices

本文关键字:有可能 路径 之间 顶点 何找      更新时间:2023-10-16

我正在调试一个遗留代码,其中道路网络由Boost Graph表示。A_Star搜索并没有给我 2 个特定点之间的最短路径,我知道boost不会错(直到我调试了一千次我的代码)。

要手动调试,我需要知道如何打印 2 个顶点之间的所有可能路径。在我的输出中,每条路径都应该由一系列边及其相应的权重表示。

我重视您的帮助和评论

A* 基于启发式方法。如果旧版使用 A*,则意味着问题更复杂,然后只需找到最短路径即可。

要找到 2 个顶点之间的最短路径,有某些图算法,Dijkstra 是最容易实现的(确保也使用循环检查)。这些都是确定性的。

如果你需要知道 2 个顶点之间的所有路径,这个是 NP 完备的,这意味着你需要回溯。

A*通常用于解决NP完全问题。结果不是最好的路径,只是在适当的时间内找到的一条非常好的路径。

来自 A* 的启发式用于删除递归或将算法从回溯转换为广度优先搜索(通常是后者)。

A

*算法和Dijkstra可解决的问题之间的区别示例如下(从我的头顶):

    查找曼哈顿
  • 从X,Y角到X1,Y1角的最短道路(可由Dijkstra或曼哈顿BFS解决)

  • 根据
  • 某些时间,考虑到交通和交通信号灯,从 X,Y 角到拐角 X1,Y1 选择曼哈顿的最佳路线(因此,如果您在 t0 到达 1,1 处,则边缘 1,1 到 1,2 的成本与在 t1> t0 处到达 1,1 的成本之间存在显着差异,例如:该部分道路在 t1 处被阻塞 10 小时)。