【发布时间】:2020-10-01 20:23:31
【问题描述】:
给定一条无向路径,在输入起始节点 u 和结束节点 v 后,不同最短路径数的算法是什么?该算法可以依赖于 |V|和 |E|,但必须是线性的。
证明它实际上返回任何 u 和 v 的不同最短路径的数量也会很有帮助。
【问题讨论】:
-
对于两条不同的路径,它们是只有顶点 u 和 v 相同还是只是不同的路径(可能有共同的顶点)?
-
@wcochran Distinct 仅表示任何一对这样的路径至少在一条边上不同。
-
大多数类似 Dijkstra 的算法将构建一棵树(以 u 为根)产生一条最短路径,您可以从 v 处的叶子向后走回到 u 处的根。您所问的问题是,可能存在大量组合的最小路径,仅枚举它们可能非常昂贵。
-
@wcochran 我可以使用一些广度优先搜索的实现吗?那会是什么样子?
-
BFS 会很好用。每次通过,您都会从根节点更深入地搜索 1 级。因此,如果您在第 n 次通过时遇到 v,您就知道最小长度为 n。然后,您可以计算在最后一次通过时遇到 v 的次数并退出。我会考虑一下细节。