这个算法是基于并查集,然后结合了贪心思想;
我使用正确发过的一个题作为例子;
完整代码见文章:公路村村通
先用一个结构体来存储两个城镇的编号及相关费用;
然后写一个并查集模板,前面也有发的;
具体情况就是这样:
typedef struct {
int u,v,w;
}WW;
int p[1001];
int find(int x){
if(p[x]==x)
return x;
else return p[x]=find(p[x]);
}
该算法的关键在于通过并查集去将每一个顶点作为一个单独的集合,然后通过贪心思想去进行从小到大的检索,得到每个边的根,通过判断根是否相同,然后进行合并集合;
这里每合并一个就可以进行累加计算,从而得到我们所需要的最低成本;
代码:
for(int i=0;i<e;i++){
u=D[i].u;
v=D[i].v;
x=find(u);
y=find(v);
if(x!=y){
p[x]=y;
sum=sum+D[i].w;
}
}
//讲解的有一些草率,可能是没有学好吧,回头理解慢慢深刻了,会回来更新文章的;