algorithm - O(E+V) 算法计算给定图上 2 个节点之间的最短路径数
问题描述
当给定一个带有顶点和边的图 G |V| 和 |E| 分别和顶点 u 和 t,写一个 O(|E|+|V|) 算法来计算从 u 到 t 的最短路径的数量,即如果有 5 条长度为 4 的路径,长度 4 是从 u 的最短路径到 t 那么算法将输出 5。
我知道该算法必须以某种方式合并 DFS 或 BFS 由于其运行时间,因为每个都有 O(|E|+|V|) 运行时间,但我有点卡住了。我尝试实现一些东西,它会重复执行 DFS,算法在 t 处终止,但这对于决定将哪些节点设置为已访问以及在每次迭代后重置哪些节点变得有问题。
提前致谢!
解决方案
您可以使用广度优先搜索。对于每个顶点,跟踪:
- 从u到该顶点
的最短路径长度
- 每当您处理给定的顶点时,您都会为它的所有尚未设置此属性的邻居设置此属性。
- 这兼作“已经入队”标志:您最初设置为诸如 ɴɪʟ 或 ∞ 之类的标记值,并且只对任何给定顶点更新一次。因此,您不需要单独的标志来跟踪访问的顶点。
- 从u到该顶点
的最短路径数
- 每当你处理一个给定的顶点时,你会为它的所有从u的最短路径长度大于你正在处理的顶点的最短路径长度的邻居适当地增加这个属性。
- 请注意,您将为某些顶点多次更新此属性,但这没关系,因为您只在每条边上更新一次。
推荐阅读
- python - brew 在 m1 monterey mac 上安装了 uwsgi 不加载应用程序
- python - 堆叠三角形,同时使用 python 将大小增加一倍
- python - Mask-RCNN 的智能多边形标注
- java - 如何设置 VSCode 以使用 Kotlin 和 Java?
- redirect - 将相对 url string1 更改为 wordpress 页面的重定向代码是什么
- python - 尝试进行 API 调用,但不断收到 TypeError
- python - 奇怪的 matplotlib 直方图:x 限制的变化破坏了直方图
- elasticsearch - 在弹性搜索中通过键、值或两者在具有动态字段的对象数组中搜索
- wpf - WPF 如何让 TextTrimming="CharacterEllipsis" 在边框内的 TextBlock 中显示
- python - Flask Dropdown 只工作一次