64,639
社区成员
发帖
与我相关
我的任务
分享
void ShortestPath_DIJ(MGraph G, int v0, PathMatrix &P, ShortPathTable &D)
{
int v, w, i, j, min;
int final[MAX_VERTEX_NUM];
for(v = 0; v < G.vexnum; ++v)
{
final[v] = 0;
D[v] = G.arcs[v0][v];
for(w = 0;w < G.vexnum; ++w)
{
P[v][w] = 0;
}
if(D[v] < 0x7fffffff)
{
P[v][v0] = P[v][v] = 1; //改动
}
}
D[v0] = 0;
final[v0] = 1;
for(i = 1; i < G.vexnum; ++i)
{
min = 0x7fffffff;
for(w = 0; w < G.vexnum; ++w)
{
if(!final[w] && D[w] < min)
{
v = w;
min = D[w];
}
}
final[v] = 1;
for(w = 0; w < G.vexnum; ++w)
{
if(!final[w] && min < 0x7fffffff && G.arcs[v][w] < 0x7fffffff && (min + G.arcs[v][w] < D[w]))
{
D[w] = min + G.arcs[v][w];
for(j = 0;j < G.vexnum; ++j)
{
P[w][j] = P[v][j];
}
P[w][w] = 1;
}
}
}
}