algorithm - 在有向未加权图中查找两个节点之间的所有最短路径的数量

标签 algorithm graph shortest-path breadth-first-search

我需要帮助来找出有向未加权图中两个节点之间的所有最短路径的数量。

我能够使用 BFS 算法找到最短路径之一,但我不知道如何找到所有最短路径。

知道我可以使用的算法/伪代码吗?

谢谢!!

最佳答案

您可以记住有多少条路径通向每个节点,并在发现新节点时总结该数字。

为简单起见,我们假设您有常规 BFS 算法,每当您使用边 (u,v) 时,都会调用 visit(u,v,k),其中:

u - the source node of the edge
v - the target node of the edge
k - the distance from the original source to u

除此之外,假设您有一个映射 d:(vertex,distance)->#paths
这基本上是一个 map (或二维矩阵),它的键是一对顶点和一个整数 - 距离,它的值是从源头到那个顶点的最短路径的数量,距离 k.

很容易看出对于每个顶点v:

d[v,k] = sum { d[u,k-1] | for all edges (u,v) } 
d[source,0] = 0

现在,您可以轻松找到通向每个节点的长度为 k 的最短路径的数量。

优化:

您可以看到“长度为 k 的最短路径数”是多余的,实际上每个顶点只需要 k 的一个值。这需要一些簿记,但可以节省一些空间。

祝你好运!

关于algorithm - 在有向未加权图中查找两个节点之间的所有最短路径的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34797242/

相关文章:

c++ - boost::graph 中的 DFS 更改图形内容

arrays - 如何找到加起来达到一定长度的所有单词组合?

c# - 使用Aforge遗传算法库实现一条兼作基因的染色体?

将点放入具有最大最小距离的正方形的算法

algorithm - n 元组的平面排列(广度优先)

algorithm - 有没有一种有效的方法可以在函数图中找到最短路径?

java - 如何实现并查算法?

mysql - 寻找MySQL中存储300万个顶点的图的有效方法

algorithm - 约翰逊算法 - h 函数

algorithm - Dijkstra 和 Bellman-Ford 算法什么时候都找不到最短路径?