Dijkstra算法
适用于计算一个顶点到其他所有
直接结合题目分析
【例】

分析上图从源点a到其它各顶点的最短路径:
第一趟:从源点a出发,到b,代价是2;a到c代价是5,取小者,加入集合S={a,b}
第二趟:从b出发,可以到c和d,a->b->c代价是3(比a直接到c的代价5要小,保留),a->b->d代价是5,取小者加入集合S={a,b,c}
第三趟:从c出发,可以到d,e,f;a->b->c->d代价是6(比a->b->d代价5要大,需要更新)更新为a->b->d代价5;a->b->c->e代价是7;a->b->c->f代价是4;取小者4加入集合S={a,b,c,f}
第四趟:从f出发,还剩下顶点d和e,即就是a->b->c->f->d代价是∞(比a->b->d代价5要大,需要更新)更新为a->b->d代价5;a->b->c->f->e代价是∞(比a->b->c->e代价7要大,需要更新)更新为a->b->c->e代价7;取小者5加入集合S={a,b,c,f,d}
第五趟:只剩下e,直接加入集合S={a,b,c,f,d,e}

【例2】


分析上图从顶点1到其它各顶点的最短路径:
第一趟:从顶点1出发到2,代价是5;1到5代价是4,取小者,加入集合S={1,5}
第二趟:从5出发,可以到2,4,6,1->5->2代价是10(比1直接到2的代价5要大,舍弃)取1到2代价5;1->5->4代价是11;1->5->6代价是9;取小者加入集合S={1,5,2}
第三趟:从2出发,可以到3,4,1->2->3代价是7;1->2->4代价是14(比1->5->4代价是11要大,舍弃)取1->5->4代价11;取小者加入集合S={1,5,2,3}
第四趟:同理,取小者加入集合S={1,5,2,3,6}
第五趟:只剩下4,直接加入集合S={1,5,2,3,6,4}
【例】(2022年8题)如下图,从顶点1到2,3,4,5的最短路径保存在dist中,求出第二条最短路径后,dist中的内容更新为____.(选C)
A. 26,3,14,6
B. 25,3,14,6
C.21,3,14,6
D.15

本文详细解析了Dijkstra算法和Floyd算法的工作原理及应用案例。通过具体实例,展示了如何利用这两种算法来解决最短路径问题。Dijkstra算法适用于单源点到其他所有顶点的最短路径计算,而Floyd算法则适用于任意两点间的最短路径计算。

2755

被折叠的 条评论
为什么被折叠?



