dijkstra算法
一、 简介
1、 概念
Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。注意该算法要求图中不存在负权边。
问题描述:在无向图 G=(V,E) 中,假设每条边 E[i] 的长度为 w[i],找到由顶点 V0 到其余各点的最短路径。(单源最短路径)
二、 实现原理
1、 动图演示

2、 思路解析

| S集合 | U集合 |
|---|---|
| 选A为起点,S={A} 此时的最短路径 A->A=0 以A为中心点,从A开始查找 |
U={B, C, D, E, F} A->B=10 A->D=4 A->{E, F, C}= ∞ \infty ∞ d(AD)最短 |
| 选入D,此时S={A, D} 此时最短路径 A->A=0 A->D=4 以D为中间点,从A->D这条最短路径进行查找 |
U={B, C, E, F} A->D->B=6 < 10 A->D->E=10 A->D->C=19 A->D->F= ∞ \infty ∞ d(ADB)最短 |
| 选入B,此时S={A, D, B} 此时最短路径 A->A=0 A->D=4 A->D->B=6 以B为中间点,从A->D->B这条路径进行查找 |
U={C, E, F} A->D->B->C=14<19 A->D->B->E=12>10 A->D->B->F= ∞ \infty ∞ d(ADE)最短 |
| 选入E,此时S={A, D, B, E} 此时最短路径 A->A=0 A->D=4 A->D->B=6 A->D->E=10 以E为中间点,从A->D->E这条路径进行查找 |
U={C, F} A->D->E->C=11<14 A->D->E->F=22 d(ADEC)最短 |
| 选入C,此时S={A, D, B, E, C} 此时最短路径 A->A=0 A->D=4 A->D->B=6 A->D->E=10 A->D->E->C=11 以C为中间点,从A->D->E->C这条路径进行查找 |
U={F} A->D->E->C->F=16 发现最短路径为A->D |

本文介绍了Dijkstra算法的基本概念,强调了它作为单源最短路径算法的重要性,特别是对于不含负权重边的图。文章详细阐述了算法的实现原理,并通过动图辅助理解。最后,提供了Python代码实现,包括构建距离矩阵和算法的具体步骤。
最低0.47元/天 解锁文章
2846

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



