图示步步详解最短路径Disktra算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
U中集合已空,查找完毕 8 选入D,此时S={A,B,E,G,F,H,C,D}, 此 时 最 短 路 径 A->A=0,A->B=2,A>B->E=4, A->B->E->G=5,A->B->E>F=6, A->B->E->F->H=8, A->B->E->F->H>D=10,以D为中间点,从D开始 找
2
6
7wk.baidu.com
2 2 3 3
1
4
2
H
2
在上面无向图,要求从点A到点D的最短路径, 每 相邻2点之间距离已标注在路径之间,如点A、 B之间距离为2。 解决上面的问题,这里我们采用基于贪心算法的 Dijstra算法,当然也有其他的算法可以解决,如动 态规划等。
(Dijkstra)算法思想
按路径长度递增次序产生最短路径算法: 把V分成两组: (1)S:已求出最短路径的顶点的集合 (2)V-S=T:尚未确定最短路径的顶点集合 将T中顶点按最短路径递增的次序加入到S中 保证:1)从源点V0到S中各顶点的最短路径长度都 不大于 从V0到T中任何顶点的最短路径长度 2)每个顶点对应一个距离值 S中顶点:从V0到此顶点的最短路径长度 T中顶点:从V0到此顶点的只包括S中顶点作中 间 顶点的最短路径长度 依据:可以证明V0到T中顶点Vk的最短路径,或是 从V0到Vk的 直接路径的权值;或是从V0经S中顶点到Vk 的路径权值之和
7 选入C,此时S={A,B,E,G,F,H,C}, 此 时 最 短 路 径 A->A=0,A->B=2,A>B->E=4, A->B->E->G=5,A->B->E>F=6, A->B->E->F->H=8,A->B->C=9 , 以 C 为中间点,从C开始找
U={D}, A->B->E->F->H->D=10, A->B->C->D=12(A->B->E->F-C->D=12), 发现A->B->E->F->H->D=10距离最短
4 选入G,此时S={A,B,E,G},此时 最短路径A->A=0,A->B=2, A->B>E=4, A->B->E->G=5,以G为中间 点,从G开始找
U={C,D,F,H}, A->B->E->G->H=9, A->B->C=9, A->B->E->F=6, A->U中其他顶点=∞ 发现A->B->E->F=6距离最短
步 S集合中 U集合中 骤 1 选入A,此时S={A},此 U={B,C,D,E,F,G,H}, 时最短路 径 A->A=0, 以 A A->B=2, 为中间点,从A开始找 A->G=6, A->U中其他顶点=∞ 发现A->B=2距离最短 2 选 入 B , 此 时 S={A,B} , U={C,D,E,F,G,H}, 此时最短路径A->A=0,A- A->B->E=4, >B=2,以B为中间点,从B A->G=6, 开始找 A->B->C=9 A->U中其他顶点=∞ 发现A->B->E=4距离最短 3 选入E,此时S={A,B,E}, U={C,D,F,G,H}, 此时最短路径A->A=0,A- A->B->E->G=5(比上面第一步中A>B=2, A->B->E=4,以E为中 >G=6要短),此时到G的距离为A间点,从E开始找 >B->E->G=5, A->B->C=9, A->B->E->F=6, A->U中其他顶点=∞ 发现A->B->E->G=5距离最短
求最短路径步骤
算法步骤如下: 1. 初使时令 S={V0},U={其余顶点},U中顶点对应 的距离值 若存在<V0,Vi>,d(V0,Vi)为<V0,Vi>弧上的权值 若不存在<V0,Vi>,d(V0,Vi)为∝ 2. 从U中选取一个其距离值为最小的顶点W且不 在S中,加入S,并把该点W从U中剔除。 3. 对U中顶点的距离值进行修改:若加进W作中 间顶点,从V0到Vi的 距离值比不加W的路径要短, 则修改此距离值 重复上述步骤2、3,直到S中包含所有顶点,即 U=空为止
5 选入F,此时S={A,B,E,G,F},此 时最短路径A->A=0,A->B=2,A->B>E=4, A->B->E->G=5,A->B->E>F=6,以F为中间点,从F开始找
U={C,D,H}, A->B->E->F->H=8( 比上面第四步中A->B->E->G->H=9 要短),此时到H的距离为A->B->E->F->H=8, A->B->E->F->C=9 (与上面第2步A->B->C=9相等), A->U中其他顶点=∞ 发现A->B->E->F->H=8距离最短 6 选入H,此时S={A,B,E,G,F,H}, U={C,D}, 此时最短路径A->A=0,A->B=2,A- A->B->E->F->H->D=10, >B->E=4, A->B->E->G=5,A->B->E- A->B->E->F->C=9 (与上面第2步A->B->C=9相等), A->U中其他顶点=∞ >F=6, A->B->E->F->H=8,以H为中间点, 发现A->B->C=8距离最短 从H开始找