这些天数据结构某些地方的确让哥头疼死了,也让我兴趣倍增。琢磨了半天终于把迪杰斯特拉算法给搞清了。哎,ungelivable~
void ShortestPath_DJS(AdjMatrix* G, int v0)
{
int idst[MAX_VERTEX_NUM];
VertexSet path[MAX_VERTEX_NUM];
VertexSet S;
int ivex, k, t, min;
for(ivex = 0; ivex < G->vexnum; ivex++)
{
InitList(&path[ivex]);
dist[ivex] = G->arcs[v0][ivex].adj;
if(dist[ivex] < INFINITY)
{
AddTail(&path[ivex], G->vexs[v0]);
AddTail(&path[ivex], G->vexs[ivex]);
}
}
InitList(&S);
AddTail(&s, G->vexs[v0]);
for(t = 0; t <= G->vexnum; t++)
{
min = INFINITY;
for(ivex = 0; ivex < G->vexnum; ivex++)
{
if(!Member(&S, G->vexs[ivex]) && dist[i] < min)
{ k= ivex; min = dist[ivex]; }
}
AddTail(&S, G->vexs[k]);
for(ivex = 0; ivex < G->vexnum; ivex++)
{
if(!Member(&S, G->vexs[ivex]) && G->arcs[k][ivex] != INFINITY &&(dist[k] + G->arcs[k][ivex].adj < dist[ivex]))
//如果找到更短的路径,更新
{
dist[ivex] = dist [k] + G->arcs[k][ivex].adj;
path[ivex] = path[k]; //将顶点Vivex替换成Vk,V0-Vivex变成V0-Vivex
AddTail(&path[ivex], G->vexs[ivex]);
}
}
}
}