MST的kruskal算法

其实就是并查集的应用,先将邻接矩阵换成边集,再按权值由小到大排序,最后用Unionset构造最小生成树。。。。

带有优化的并查集=。=

int find_father(int x)
{
    int tot=0;
    while(x!=father[x])
    {
        save[tot++]=x;
        x=father[x];
    }

    for(int i=0;i<tot;i++)
    {
        father[save]=x;
    }

    return x;
}

int Union_set(int x,int y,int z)
{
    int Fx=find_father(x);
    int Fy=find_father(y);

    if(Fx==Fy) return 0;
    if(Rank[Fx]<=Rank[Fy])
    {
        father[Fy]=Fx;
        Rank[Fx]+=Rank[Fy];
    }
    else
    {
        father[Fx]=Fy;
        Rank[Fy]+=Rank[Fx];
    }

    return z;
} 
posted @ 2013-07-18 08:45  码代码的猿猿  阅读(238)  评论(0编辑  收藏  举报