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

时间:2015-01-13 02:42:23

标签: c++ boost boost-graph

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

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

我很重视你的帮助和意见

1 个答案:

答案 0 :(得分:2)

A *基于启发式。如果遗产使用A *意味着问题更复杂,那么只需找到最短路径。

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

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

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

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

A *算法和Dijkstra可解决的问题之间的差异示例如下(从我的头脑中):

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

  • 选择Manhatan的最佳路线,从X角,Y角到X1角,Y1考虑交通和交通信号灯,按照一定的时间(所以它的边缘1,1到成本之间的显着差异) 1,2如果你在t0到达1,1并且如果你在t1> t0到达1,1,例如:道路的这一部分在t1被阻挡10小时)。