标签:
Dijkstra算法是一个用于计算单源最短路径的算法,也即加权有向图中,找出某一个节点到其他各个节点的最短距离。
1、在n个节点的有向图中,假如要计算A节点到其他所有节点的最短路径,那么我们可以找出A节点能直接到达且权最小的一个节点B,那么该路径即为A节点到B节点的最短路
径。原因在于:如果A到B有更短的路径,那么A一定需要通过第三方的节点来到达B,比如A需要通过C节点,然后通过C节点到达B节点。显然这里是不存在这样的路径了,因为A经过
任何节点到达B节点的路径长度都会大于A直接到达B节点的路径长度(-_-上面都说过了,B节点是A节点能直接到达的最短路径的节点)。
2、上面我们找到了A节点到B节点的最短路径,接下来我们继续寻找A到剩余节点的最短路径。根据上面的思路,我们可以在剩余节点中找出一个A能直接到达企且权最小节点D,A
到D的路径是不是就是A到D的最短路径你呢,显然这里是不确定的,因为这里A到D的最短路径可能会经过B节点,既然这样,那就干脆将B也考虑进来好了,计算出A->B->D的路径
的长度,然后与A->D的路径长度进行比较,如果A-B->D确实小于A->D的路径长度,那么久A->B->D当做为A->D的路径长度,其他从B能直接到达的节点也作同样的处理。
3、那么我们现在再从除B节点外找一个到节点最短路径的节点E,A到E节点的路径长度是不是A到E节点的最短路径呢,答案是肯定的,因为这里再也找不出一个第三方节点能使A
到E节点更短了,理由同3。
语言表达能力不行,自己都被自己说晕了!!!!!
标签:
原文地址:http://www.cnblogs.com/fangwencai/p/4817875.html