最小生成树伪代码模板

来源:互联网 发布:墨脱公路沥青路面数据 编辑:程序博客网 时间:2024/06/06 09:53
//G(v,E)的权值连接图
struct edge{
int fromvex;
int endvex;
int length;
}a[n];
//v的信息存储(此时是以坐标中的点储存)
struct point{
int x;
int y;
}p[n];
prime(){
for(i=0;i<n;i++){
scanf("%d %d",&p[i].x,&p[i].y);
}
//对根进行赋值
a[0].fromvex=0;
a[0].endvex=0;
a[0].length=0;
//获得第一次权值的计算
for(int i=1;i<n;i++){
a[i].fromvex=0;
a[i].endvex=i;
a[i].length=sqrt(pow(p[i].x-p[0].x,2)+pow(p[i].y-p[0].y,2));
}
int min=1;
//不断对生成树完善
for(int k=1;k++;k){
//找出v-v'与v'的最小权值
for(i=k;i<n;i++){
if(a[i].length<a[min].length){
min=i;
}
}
//min与k交换,获得min
struct edge e;
e=a[min];
a[min]=a[k];
a[k]=a[min];
int v=a[k].endvex;
//找出v-v'中的j与v'的最小的权值
for(i=k+1;k<n;i++){
int vex=a[i].endvex;
if(double d=sqrt(pow(p[a[vex].x-a[v].x,2)+pow(a[vex].y-a[v].y,2))<a[i].length){//更新权值信息
a[i].fromevex=v;
a[i].length=d;
}
}
}


}
//获得了最小生成树的所有资料,点的连接,长度,所有的变化都是基础的,
0 0
原创粉丝点击