Dijkstra(迪杰斯特拉)算法求单源最短路径问题
重要的事情说三遍:代码不是我写的!代码不是我写的!代码不是我写的!
第一个算法是严蔚敏数据结构(C语言版)上写的,第二个算法是王道数据结构上写的,我想着记录在博客上以后比较好找。
如有谬误或者不足还请批评指正!
void ShortestPath_DIJ(MGraph G, int v0, PathMatrix &P, ShortPathTable &D)
{
//用Dijkstra算法求有向网G的v0顶点到其余顶点v的最短路径P[v]及其带权长度D[v]
//若P[v][w]为true,则w是从v0到v当前求得最短路径上的顶点
//final[v]为true当且仅当v∈S,即已经求得从v0到v的最短路径
for (v = 0; v < G.vexnum; ++v)
{
final[v] = false;
D[v] = G.arcs[v0][v];
for (w = 0; w < G.vexnum; ++w)
P[v][w] = false; //设空路径
if (D[v] < INFINITY)
{
P[v][v0] = true;
P[v][v] = true;
}
}
D[v0] = 0; //初始化,v0顶点属于S集
final[v0] = true;
//开始主循环,每次求得v0到某个v顶点的最短路径,并加v到S集