【发布时间】:2012-04-30 20:38:08
【问题描述】:
这是练习:
设 v 和 w 是有向图 G = (V, E) 中的两个顶点。设计一个线性时间算法来找出 v 和 w 之间的不同最短路径(不一定是顶点不相交)的数量。注意:G 中的边没有加权
对于这个消费税,我总结如下:
- 是有向图
- 它要求不同最短路径的数量。首先,路径应该是最短的,然后可能有多个这样的最短路径长度相同。
- 在 v 和 w 之间,因此从 v 到 w 和从 w 到 v 都应该计算在内。
- 线性时间。
- 图表未加权。
综合以上几点,我有如下想法:
- 我不需要使用Dijkstra’s Algorithm,因为该图没有加权,我们试图找到所有最短路径,而不仅仅是一条。
- 我为最短路径的数量维护一个
count - 我想先从 v 使用 BFS 并维护一个
global level信息 - 我每次将
global level增加一个,然后 BFS 达到一个新的水平 - 我还维护了
shortest level信息,以获取到 w 的最短路径 - 第一次在旅行中遇到w,我将
global level分配给shortest level和count++; - 只要
global level等于shortest level,我每次再遇到w都会增加count。 - 如果
global level变得比shortest level大,我将终止旅行,因为我正在寻找最短路径而不是路径。 - 然后我再次为 w 到 v 执行 2 - 8
我的算法正确吗?如果我先做 v 到 w,然后再做 w 到 v,这仍然被认为是线性时间吗?
【问题讨论】:
标签: algorithm data-structures graph breadth-first-search