今天兴致勃勃的开始做了贪心算法的第一道题目:Single-Source Shortest-Paths Problem
也就是所谓的单源最短路径,课件上有算法,但是代码实现起来还真是不容易(仅仅对于我这个菜鸟来说),下面是算法框架:
设S为最短距离已确定的顶点集(看作红点集),V-S是最短距离尚未确定的顶点集(看作蓝点集)。
①初始化
初始化时,只有源点s的最短距离是已知的(D(s)=0),故红点集S{s} 。
②重复以下工作,按路径长度递增次序产生各顶点最短路径
在当前蓝点集中选择一个最短距离最小的蓝点来扩充红点集,以保证算法按路径长度递增的次序产生各顶点的最短路径。
当蓝点集中仅剩下最短距离为∞的蓝点,或者所有蓝点已扩充到红点集时,s到所有顶点的最短路径就求出来了。
示例图形如下:
Q u S 临接点 d[1] d[2] d[3] d[4] {0,1,2,3,4} Φ ∞ ∞ ∞ ∞ {1,2,3,4} 0 {0} 1,4 10 30 100 {2,3,4} 1 {0,1} 2 60 {2,4} 3 {0,1,3} 4,2 50 90 {4} 2 {0,1,3,2} 4 60 Φ 4 {0,1,2,3,4}
有了这样思路下面就要来实现代码了:
下面是我自己写了三个小时的代码,可以输入0~4之间的任意数字,拿来给大家分享(高手别喷):