Dijkstra算法,书上其实说的很简洁,仔细看,仔细思考是会理解的.但要先理解几条引论和推理.
而自己思考的思路在不需要任何推理只从贪心思路出发,和Dijkstra有所不同,但本质一样,那么自己按照理解,试着慢慢讲下.
一,问题:
从某个源点,到其他各点的最短路径.
注意,不要想成某一个点,到某个点的最短路径.这样的话不太好推导出思路。
某个源点,到其他各点的最短路径.这样的思路反而好推导出,反正所有点都计算出来了。某点到某点就是其中一条而已。,
二,分析.
先抛弃书中所有关于最短路径的引理,定理,公理....
先看图.
要找到从0点.到所有点的最短路径.
假如,小明,站在0点.他很渴,天气很热,再不喝水要渴死,而每个其他点,都有一瓶水,点和点之间的交通工具还不一样,有的是汽车,有的还必须走路.
假设这里的权值代表两点之间所花费的时间,比如0 ~3中间的数字6, 表示.从0到3要6个小时的慢车.
打开地图一看,到底哪个是最短啊.他想喝3点的水,发现要9个小时. 居然比 先到2,再到4, 7个小时还长,那么去4吧.你当小明傻啊.到了2点,不喝水,还去4点.
所以小明得到一个常识,对于第一瓶水,需要中转点而到达的目的点肯定不是花费时间最少的,最起码可以喝那个中转站的水.
直连的点话,看看哪个点花费的时间少. 1点最少,只要3个小时.
废话少说,小明直接从0做车到1,花费3个小时,喝到了第一瓶水,刚喝完水,小明被时光机, 卟的一声,居然传回了0点.(因为我们要从0开始,找出到所有点的最短路径,所以小明被传送了.)
因为小明还是很渴,天气依然很热,再不喝水要渴死.
那么下一个最近的点在哪里?
小明开始思索, 1点是和0直连最近的.已经被我喝掉了.那么舍去1点,第二近