1.问题的提出
如何在图中选择n-1条边,使得n个顶点间两辆可达,并且这n-1条边的权值最小?设图如下所示:
要求:
1.必须使用且仅使用该网络中的n-1条边来连接网络中的n个顶点
2.不能使用产生回路的边
3.各边上的权值总和要求最小
2.Prim算法的基本思想
1.从图N={V,E}中选择某一顶点u0进行标记,之后选择与它关联的具有最小权值的边(u0,v),并将顶点v进行标记
2.反复在一个顶点被标记,而另一个顶点未被标记的各条边中选择权值最小的边(u,v),并将未标记的顶点进行标记
3.如此进行下去,直到图中所有顶点都被标记了为止
3.算法实现步骤
1.从某一顶点u0触发,使得U={u0},TE={}
2.每次选择一条边,这条边是所有(u,v)中权值最小的边,且u∈U,v∈V-U。修改U和TE
TE = TE+{(u,v)}
U = U+{v}
3.当U≠V时,转2,否则结束
4.算法实现
#define VNUM 9 //定义点的最大数量
#define MV 65535 //当两点之间不可达时,权值为65535
int p[VNUM]; //临时数组
int cost[VNUM]; //存储消耗
int mark[VNUM];