美文网首页
带权连通图的最小生成树——Kruskal算法的理解

带权连通图的最小生成树——Kruskal算法的理解

作者: 呵呵哒1991 | 来源:发表于2017-04-24 17:57 被阅读168次
    PRIM 和 KRUSKAL 的区别 
    1.  单位不同 Prim  以点为单位 以边为判定条件 找出  代价最小的点。 KRUSKAL 是以 边的为单位 ,以点为 判定条件找出可用的边
   2.  算法的数据结构不同, PRIM 针对的是 邻接矩阵  ,Kruskal  针对 是 边集数组

1. 把所有权值的边进行排序

2. 找出最小权值最小的边,记录此时连接的点

3. 继续寻找 下个权值最小的边,如果 此时形成的图没有环,此边就生效,并记录心新连接的点

4. 重复上述步骤 ,直到连接了所有的边

9fb316cd967dc54ff48dd62a2719aeb0.jpg
void MiniSpanTree_kursKal(MGraph G)
{

   int find(int * parent,int f);

   int  i,n,m,maxedges;
    maxedges= MAXVEX*(MAXVEX-1)/2;

    Edge edges[maxedges];
    int parent[MAXVEX];

    for(i=0;i<G.numVertexes;i++)
    {
         parent[i]=0;


    }

    for (i = 0; i <G.numEdeges ; ++i)
    {
         n= find(parent,edges[i].start);
         m=find(parent,edges[i].end);

        if(n!=m)
        {
             parent[n]=m;

        }

    }


    int  find(int * parent, int f)
    {
        while(parent[f]>0)
        {
            f=parent[f];
        }
        return  f;

    }


}

相关文章

网友评论

      本文标题:带权连通图的最小生成树——Kruskal算法的理解

      本文链接:https://www.haomeiwen.com/subject/aybpzttx.html