克鲁斯卡尔算法基本使用方法及相关示例

这个算法是基于并查集,然后结合了贪心思想;

我使用正确发过的一个题作为例子;

完整代码见文章:公路村村通

先用一个结构体来存储两个城镇的编号及相关费用;

然后写一个并查集模板,前面也有发的;

具体情况就是这样:

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

//讲解的有一些草率,可能是没有学好吧,回头理解慢慢深刻了,会回来更新文章的;

你可能感兴趣的:(算法,c++,数据结构)