Dijkstra迪克斯特拉算法
用途:求带权图的最短路径
求a点到f点的最短路径
1、到达与a直接相连的点的最小距离:
表的意思是目前从每个点到点a的最短距离
a | 0 |
---|---|
b | 4 |
c | 2 |
2、求与表中的点直接相连的点到a的距离
比如与b直接相连的有c和d,与c直接相连的有b、e、d
更新上面的表
a | 0 |
---|---|
b | min{4, 2+1} =3(a到b,c到b) |
c | min{2, 4+1}=2 (a到c,b到c) |
d | min{3+5, 2+8}=8 (b到d,c到d) |
e | 2+10=12 (c到e) |
3、重复步骤2
与d直接相连的有b、c、e、f
与e直接相连的有c、d、f
a | 0 |
---|---|
b | 3 |
c | 2 |
d | min{8, 12+2}=8 (之前最小值,从e到d) |
e | min{12,8+2}=10 (之前最小值,从d到e) |
f | min{8+6, 10+3}=13 (d到f,e到f) |
4、重复步骤2
与f直接相连的有d、e
a | 0 |
---|---|
b | 3 |
c | 2 |
d | 8 |
e | 10 |
f | min{13, 8+6, 10+3}=13(之前最小值,d到f,e到f) |
最后得出结果,从a到f的最短路径为13
可以看出,迪克斯特拉算法和深度优先搜索类似,都是以当前点为中心向周围扩散,只不过一个带权,一个不带权
– 暂无合适的练习题 –