- 0
- 0
- 约1.29千字
- 约 35页
- 2019-08-24 发布于福建
- 举报
最小生成树算法
------prim Kruskal;生成树的概念;最小代价生成树;最小代价生成树;普里姆(Prim)算法;V4
;V4
;V4
;V4
;V4
;V4
;普里姆算法求最小生成树:从生成树中只有一个顶点开始,到顶点全部进入生成树为止;普里姆(Prim)算法;从键盘(或数据文件)输入图的信息,用普里姆算法求解给定无向连通图的最小生成树,最后输出最小生成树中的权值和所有的边,图的存储结构自行设定。;普里姆算法的实现;adjvex
lowcost;adjvex
lowcost;adjvex
lowcost;?
;?
;?
;图采用邻接矩阵表示;#includeiostream
#includealgorithm
#includecstdlib
#define INIT 63355
#define NUM 20
using namespace std;
typedef int Elemtype;
typedef struct Tnode{
Elemtype vex[NUM];
int arac[NUM][NUM];
int v,e;
}graph;
void Init_Graph(graph g){
for(int i = 1;i=g.v;i++){
for(int j = 1;j=g.v;j++){
g.arac[i][j] = INIT;
}
}
}
;void Prim(graph g){
int min_cost = 0;
int lowcost[NUM]; //当前最短距离
int closest[NUM]; //顶点的相邻顶点(closest[i]则为i的邻接点)
int s[NUM]; //标志访问节点
for(int i = 1;i=g.v;i++){
closest[i] = 1; //初始置各顶点得邻接点为1
lowcost[i] = g.arac[1][i]; //初始置各顶点的最短距离为1到顶点的距离
s[i] = 0;
}
for(int i = 1;ig.v;i++){
int min = INIT; //min初始化无穷大
int j = 1;
for(int k = 2;k=g.v;k++){
if(lowcost[k]min!s[k]){ //找出与源点相连,且权值最小的顶点
min = lowcost[k]; j = k;
}
};Kruskal——最小生成树;1;1;1;1;1;1;1;1;克鲁斯卡尔(Kruskal)算法;代码参考
原创力文档

文档评论(0)