最小生成树伪代码模板

//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 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 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 if(a[i].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 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].fromevex=v;
a[i].length=d;
}
}
}


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

你可能感兴趣的:(最小生成树伪代码模板)