博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最小生成树--Prim算法和Kruskal算法
阅读量:6717 次
发布时间:2019-06-25

本文共 1818 字,大约阅读时间需要 6 分钟。

引言

  在了解两种最小生成树算法之前,我们要先清楚几个概念:

  • 有向图:若图中的每条边都是有方向的,各点之间只能单向传递信息,则此图为有向图。
  • 无向图:若图中的每条边都是没有方向,各点之间可以双向传递信息,则此图为无向图。
  • 连通图:在无向图中,若任意两个顶点之间都有路径相通,则称该无向图为连通图。
  • 生成树:只要能连通所有顶点而又不产生回路的任何子图都是它的生成树。
  • 最小生成树:在连通网的所有生成树中,所有边的代价和最小的生成树,称为最小生成树。 

  我们所要讲解的最小生成树,是基于无向图的基础上进行的。

 

1.

  此算法是通过逐步“加点”完成的-------------------------------------------------------------------------------

  思路:选择任意一个顶点,每次选择到当前顶点距离最近的点,把该点与顶点之间的边加入到树中,直到各顶点都有边连接并且属于同一棵树中,

  在找距离最近的点的时候用到了贪心。

  方法:1.选择一个任意顶点,用标记变量进行标记

     2.计算与此顶点相连的所有点与此顶点的距离,选择最短的那个点,进行标记,加入最小生成树,以此类推

     3.直到最小生成树有n个顶点为止

  时间复杂度:这里记顶点数v,边数e ,邻接矩阵:O(v2)   邻接表:O(elog2v)

  图片演示:

  

  代码演示:(就拿这道题来说)

void prim(int n)//Prim算法{    flag=0;    sum=0;    int k=1;    for(int i=1; i<=n; i++)    {        lowcost[i]=Map[i][1];//让lowcost数组等于该点到1的成本,默认各点到1的成本都为最低    }    vis[1]=1;//用vis数组进行标记    for(int i=1; i
lowcost[j])//遍历没有被找过的点,找最低的成本 { t=lowcost[j]; k=j; } } if(t==MAX)//如果不能找到,停止 { flag=1; return ; } vis[k]=1; sum+=t; }}

 

2.

 

  此算法是通过逐步“加边”完成的----------------------------------------------------------------------------

  思路:找最短的一条边,进行标记,依次找最短的边,直到最小生成树有n-1条边为止。

  在找最短边的过程中也用到了贪心

  方法:1.先将该树中的各边权值按从小到大顺序排列

     2.找权值最小的那条边,进行标记,再依次选择权值最小的边,注意:再次选择的边所连接的两个点,原本应属于不同的树,将这两棵树合并成同一棵树

     3.循环直到最小生成树中存在n-1条边为止

     4.还用到了并查集的思想

  时间复杂度:elog2e  e为图中的边数

  图片演示:

      

  代码演示:(就拿这道题来说)

int find_dad(int a)//找a的上级结点{    if(father[a]==a)        return a;    return father[a]=find_dad(father[a]);} int union_node(int x,int y)//将找到的结点合并起来{    int x1=find_dad(x);    int y1=find_dad(y);     if(x1!=y1)    {        father[x1]=y1;        return 1;    }    return 0;} bool cmp(edge a,edge b)//找最短的路径{    return a.w

  小声bb:并查集不会的以后会讲

 

转载于:https://www.cnblogs.com/jkxsz2333/p/9515995.html

你可能感兴趣的文章
使用NdbUnit更新数据报“违反并发性 updatecommand 影响了预期 1 条记录中的 0 条”错误的原因...
查看>>
基于ArcGIS10.0和Oracle10g的空间数据管理平台十五(C#开发)-空间数据导出
查看>>
DB2 应用
查看>>
第十六章 为什么说张清“虎头蛇尾”
查看>>
ShiftOperators.cs
查看>>
C#中的预处理命令
查看>>
K-means聚类算法(非MapReduce实现)
查看>>
使用C#创建SQL Server的存储过程(Visual Studio 2005 + SQL Server 2005)
查看>>
Assistance Required(打表)
查看>>
编程之美:寻找发帖"水王"
查看>>
Entity Framework(EF) 5
查看>>
曾经的代码系列——AJAX和JSON生成下拉列表框
查看>>
百度地图API 应用实例
查看>>
起泡排序和快速排序
查看>>
抛砖引玉:使用二进制位操作,解决铁道部火车票的数据查询和存储问题,超轻量级的解决方案...
查看>>
深入理解JavaScript系列(结局篇)
查看>>
SPSS中八类常用非参数检验之一:总体分布的卡方(Chi-square)检验
查看>>
【经典网页设计】原来404错误页面可以这样设计
查看>>
IoC模式
查看>>
【java】eclipse配置tomcat碰到的问题
查看>>