我正在调试遗留代码,其中道路网络由Boost Graph
表示。
A_Star
搜索没有给我两个特定点之间的最短路径,我知道boost
不能错(直到我调试了我的代码一千次)。
要手动调试,我需要知道如何打印两个顶点之间的所有可能路径。在我的输出中,每条路径应该由一系列边缘及其相应的权重表示。
我很重视你的帮助和意见
答案 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小时)。