v@[toc]
reference
code
void ShortestPath_DIJ(MGraph G, int v0)
{
int n = G.vertexes;
int v, i, w, min;
bool S[MAX];
int D[MAX];
int path[MAX];
//初始化
for(v = 0; v < n; v++)
{
S[v] = false;//S初始化为空集
D[v] = G.arc[v0][v];//将v0到各个顶点的最短路径初始化为弧上的权值
if(D[v] < INT_MAX)
{
path[v] = v0;//如果v0和v之间有弧,那么v的前驱为v0
}
else
{
path[v] = -1;
}
}
S[v0] = true;//将v0加入S
D[v0] = 0;//源点到源点的距离为0
//进入主循环,每次求得v0到某个顶点v的最短路径,将v加到s集
for(i = 1; i < n; i++)
{
min = INT_MAX;
//找到开始的起点
for(w = 0; w < n; w++)
{
if(!S[w] && (D[w] < min))
{
v = w;
min = D[w];
}
}
S[v] = true;//将v加入到S
cout<<S[v];
for(w = 0; w < n; w++)
{
if(!S[w] && ((D[v] + G.arc[v][w]) < D[w]))//若是找到了更短的路径
{
D[w] = D[v] + G.arc[v][w];
path[w] = v;//更改w的前驱为v
}
}
}
}