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-> |