详解图的应用(最小生成树、拓扑排序、关键路径、最短路径)

2020-01-06 13:45:16王旭

typedef struct ArcNode

{

int adjvex; //adjex域存储该边依附的在U中的顶点
VrType lowcost; //lowcost域存储该边上的权重
}closedge[MAX_VERTEX_NUM];

显然:详解图的应用(最小生成树、拓扑排序、关键路径、最短路径)

初始状态时,U={v1}(u1 为出发的顶点),则到V-U 中各项中最小的边,即依附顶点v1的各条边中,找到一条代价最小的边(u0,v0)= (1,3)为生成树上一条边。
同时将v0(=v3)并入集合U中。然后修改辅助数组的值。

1)将closedge[2].lowcost = 0;//表示顶点V3三已经并入U

2) 由于边(v2,v3)的权值小于closedge[1].lowcost,故需修改closedge[1]为边(v2,v3)及其权值,同理修改closedge[4],closedge[5].

closedge[1].adjvex = 3.

closedge[1].lowcost = 5.

 

closedge[4].adjvex = 1.

closedge[4].lowcost = 5.

 

closedge[5].adjvex = 3.

closedge[5].lowcost = 6.

以此类推,直至U = V;

 

下图给出了在用上述算法构造网图7.16的最小生成树的过程中:

详解图的应用(最小生成树、拓扑排序、关键路径、最短路径)

Prim 算法实现:

按照算法框架:

(1)U={u1},T={};
(2)while (U≠V)do
(u,v)=min{wuv;u∈U,v∈V-U }
T=T+{(u,v)}
U=U+{v}