这是练习:
设 v 和 w 是有向图 G = (V, E) 中的两个顶点。设计一个线性时间算法来找出 v 和 w 之间的不同最短路径(不一定是顶点不相交)的数量。注意:G 中的边未加权
对于这个消费税,我总结如下:
- 它是一个有向图
- 它询问不同最短路径的数量。首先,路径应该是最短的,然后可能有多个这样的最短路径长度相同。
- 在 v 和 w 之间,所以从 v 到 w 和从 w 到 v 都应该计算在内。
- 线性时间。
- 该图没有加权。
综合以上几点,我有以下想法:
- 我不需要使用Dijkstra 算法,因为该图没有加权,我们试图找到所有最短路径,而不仅仅是单个路径。
- 我维护
count
最短路径的数量 - 我想先从 v 使用 BFS 并维护一个
global level
信息 - 我
global level
每次增加一,然后 BFS 达到一个新的水平 - 我还维护
shortest level
到 w 的最短路径的信息 - 第一次在旅行中遇到 w 时,我将 分配
global level
给shortest level
andcount++
; - 只要
global level
等于shortest level
,我count
每次再次遇到 w 时都会增加。 - 如果
global level
变得大于shortest level
,我终止旅行,因为我正在寻找最短路径而不是路径。 - 然后我再次为 w 做 2 - 8 到 v
我的算法正确吗?如果我对 w 做 v,然后对 v 做 w,那仍然被认为是线性时间吗?