1 生活中的实际问题
我们经常会计算从一个城市到另一个城市的交通费用,或者途中所需要的时间。比如,a城市到c城市,中间要经过b城市,a到b的时间是10,b到c的时间是20,或者也可以经过其他城市到c城市,总时间是不一样的。而要计算出最短的时间,考虑到交通的有向性,就可以化为解决有向图中某个顶点到其他顶点的最短路径,时间就是边的权值。并称路径上的第一个顶点为源点,最后一个顶点为终点。
2 讨论两种最常见的最短路径问题之一——从某个源点到其余各顶点的最短路径
2.1 给定带权有向图G和源点a,求从a到G中其余各顶点的最短路径
如图:
如何求得这些路径?迪杰斯特拉(Dijkstra)提出了一个按路径长度递增的次序产生最短路径的算法。
2.2 算法思想
按路径长度递增次序产生算法
* 图的顶点的集合是V,已求得最短路径的终点的集合是S,V-S=T,T是尚未求出来最短路径的顶点集合
* 将T中顶点按次序加入到S中
(次序:就是源点到T中顶点的距离有大有小,按照从小到大的次序,源点到其他顶点有路径的距离值有具体值,没有路径的距离值是无限大)
3 c语言算法的实现