码迷,mamicode.com
首页 > 编程语言 > 详细

(学习1)最小生成树-Prim算法与Kruskal算法

时间:2020-02-27 16:09:34      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:时间复杂度   kruskal   代码   line   i++   github   gen   并且   end   

最小生成树:

一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边.

1:Prim算法(适合稠密图)

伪代码:

Prim(G){   //G为图

       int addnow[maxen];//记录当前有多少点被纳入集合;

       int lowcost[maxen]; //记录当前集合中的点到其他点的最小距离的边集合;

       init();//初始化点集合与边集合;

       addnow[start]=true; //将起点纳入点集合

       for(i=1;i<G.vertex;i++){  //还剩下n-1个点需要归并

           Min=99999;

           for(j=1;j<=G.vertex;j++){ 

                if(!addnow[j]&&lowcost[j]<minn) {    //寻找权值最小并且点未被归并的边

                 minn=addnow[j];

            index=j;         }

           }

        addnow[index]=1; //将该点加入集合

        updateV();//因为点集合新入点,故需要更新该集合到其他点的距离

      }

}

 

解析:                                               技术图片

 

 时间复杂度:O(n²)

 

Kruskal算法(适合稀疏图)

伪代码:(n为顶点数)

Kruskal(G){
   for(i->G.edge.num){
        if(find([G.edge.start])!=find([G.edge.end])){  //若没形成闭环
             find([G.edge.end])=find([G.edge.start]);  //将边加入路径
       }
       if(edgeNum==G.vertex.num-1)    //若已经找到n-1条边则退出
          break;
   }
}

解析:技术图片

 

 

 时间复杂度:o(nlogn)

 

github源码地址:

https://github.com/yizhihenpidehou/bananas/tree/master

(学习1)最小生成树-Prim算法与Kruskal算法

标签:时间复杂度   kruskal   代码   line   i++   github   gen   并且   end   

原文地址:https://www.cnblogs.com/pipihoudewo/p/12371304.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!