如何找到 2 个顶点之间的所有可能路径
How to Find All possible paths between 2 vertices
我正在调试一个遗留代码,其中道路网络由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 小时)。
相关文章:
- 有可能在Armadillo中复制MATLAB circshift方法吗
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 有可能使shared_ptr协变吗
- 有可能在信号处理程序中设置promise吗
- 是否有可能实现O(N)时间和O(1)空间解决方案,以实现C++中的字符串循环移位
- 是否有可能构建面向Linux和Windows的.Net Core C++ / CLI应用程序?
- 是否有可能使用debug_info获取ELF文件的源代码?
- C++,是否有可能/如何定义在.h和.cpp源文件中调用函数的类构造函数
- 有可能在C++中有类的查找表吗
- 是否有可能让 c++ dll 在后台运行 python 程序并让它填充向量图?如果是这样,如何?
- 向量的大小是否有可能为 1 但其中的元素数量为零?
- 是否有可能编写新的叮当声现代化规则?
- 是否有可能通过指向另一个未关联的子对象的指针来获取指向一个子对象的指针?
- 是否有可能通过演绎指南实现整个 std::make_tuple 功能?
- 是否有可能在没有复制的情况下传递 std::vector<int> 作为参数来获得 std::vector<std::array<int, 3>>?
- 是否有可能具有放入容器的移动操作的类型?
- 是否有可能通过溢出 C 中的第一个元素来写入数组第二个元素
- 声明是否有可能逃脱其封闭的名称空间
- git-是否有互联网上某处所有可能错误的列表
- 是否有可能有一个派生类继承最终函数但创建相同的函数(而不是重写)