思路:在一个平面上n个点且两两相连,每边有权值,让你找出n-1个点形成无回路的连通图,当然是权值最小;题目给你的是n个城市的坐标,第一个为x坐标,第二个为y坐标,这与kruskal算法直接给出顶点数与边数还有权值有点变化,这可能就是 编程的最大乐趣了!我先这样处理:取两个double数组X[],Y[],接下来将每个坐标的x,y分别写入,Then,double d=sqrt((xi-xj)^2+(yi-yj)^2),得到权值,在与各顶点封装排序.还有一点是计算d的时候,举个测例:由5个城市的坐标怎么得到其中1个城市与其他4个城市的距离与顶点表示
for(i=0;i
for(j=i+1;j
//scanf("%f%f",&x,&y);自己第一次写的
//两点之间的距离
d=sqrt((X[i]-X[j])*(X[i]-X[j])+(Y[i]-Y[j])*(Y[i]-Y[j]));
edges[m].u=i;
edges[m].v=j;
edges[m].w=d;
}
}
这样,会出现
0-->1=d;
0-->2,
0-->3
...
我的关键在于kruskal算法的理解与应用上自己还有太大的差距,还有并查集.