图形算法问题。
我有一张图表,用于表示道路网络。所以它有循环(环形交叉口将是一个微不足道的)。一些边缘也是双向的,一些是单向的(单向街道)。边缘按其长度加权。
假设我有两个节点并且已经计算了它们之间的最短路径。我想要做的是找到连接两个节点的所有其他路径,这些路径比某个距离X短。将这些路径称为“替换”。
ascii art中的一个例子如下,我用字母标记边缘,用数字标记节点。
F
5----6
E / \ G
3--------4
/ D \
B / \ C
1--------------2
A
假设我的路径覆盖边缘A,从1> 2开始,我想找到替代品。如果它的长度小于X,则该路径的一个替代是BDC。BEFGC是另一个。
另一个示例路径是连接节点1-> 4的BD。那个的替代品是AC。
更多要求:
谢谢!
答案 0 :(得分:1)
如果你运行Dijkstra的算法来找到最短的路径,你有一个表,它为每个节点提供从源到该节点的最短距离。我将从图中删除最短路径上的点,运行Dijkstra算法,然后从目标进行深度优先搜索,每当您正在调查的路径成为一个周期时终止搜索,或者距离的总和到目前为止的路径,从当前节点到源的最短距离大于X.
每次实际到达源节点时,您都可以打印出目前为止的路径。