最小生成树

  1. 给定一个带权无向连通图,选取一棵树,让树所有边上权的总和最小,叫最小生成树
  2. N个顶点,一定有N-1条边
  3. 包含全部顶点
  4. N-1条边都要在图中

算法介绍

普里姆算法求最小生成树,也就是在包含n个顶点的连通图中,找出只有(n-1)条边所含所有n个顶点的连通子图,也就是所谓的极小连通子图

修路问题:

  1. 该乡中有7个村庄(A,B,C,D,E,F,G)
  2. 各个村庄的距离用边数表示(权)比如 A - B 距离5公里
  3. 问:如何修路保证各个村庄都能联通,并且保证总的修路里程最短?

代码实现

public class PrimAlgorithmm {public static void main(String[] args) {//看看图是否创建成功char[] data = new char[]{'A','B','C','D','E','F','G'};int verxs = data.length;//邻接矩阵用二维数组表示 10000表示两个点不连通int [][]weight=new int[][]{{10000,5,7,10000,10000,10000,2},{5,10000,10000,9,10000,10000,3},{7,10000,10000,10000,8,10000,10000},{10000,9,10000,10000,10000,4,10000},{10000,10000,8,10000,10000,5,4},{10000,10000,10000,4,5,10000,6},{2,3,10000,10000,4,6,10000},};//创建MGraph对象MGragh gragh = new MGragh(verxs);//创建MinTree对象MinTree minTree = new MinTree();minTree.createGraph(gragh,verxs,data,weight);//输出minTree.showGraph(gragh);//测试普利姆minTree.prim(gragh,0);}
}//创建最小生成树
class MinTree{//创建图的邻接矩阵/*** @param gragh 图对象* @param verxs 图对应顶点个数* @param date 图的各个顶点值* @param weight 图的矩阵*/public void createGraph(MGragh gragh,int verxs,char date[],int[][] weight){int i,j;for (i=0;i<verxs;i++){gragh.data[i] = date[i];for (j=0;j<verxs;j++){gragh.weight[i][j] = weight[i][j];}}}//显示图片邻接矩阵public void showGraph(MGragh gragh){for (int[] link:gragh.weight){System.out.println(Arrays.toString(link));}}//编写算法得到最小生成树public void prim(MGragh gragh,int v){//visited[] 标记节点被访问过int visited[]=new int[gragh.verxs];//把当前节点标记为visited[v] = 1;//h1和h2记录两个顶点下标int h1 = -1;int h2 = -1;int minWeight = 10000;//先初始化大数 有比他小的就替换for (int k = 1; k < gragh.verxs ; k++){//每次生成的子图和哪个节点的距离最近for (int i=0;i<gragh.verxs;i++){ //i节点表示被访问过的节点for (int j=0;j<gragh.verxs;j++){ //j节点表示还没访问过的节点if (visited[i]==1 && visited[j] ==0 && gragh.weight[i][j] < minWeight){//替换minWeightminWeight = gragh.weight[i][j];h1 = i;h2 = j;}}}System.out.println("边<"+gragh.data[h1]+","+gragh.data[h2]+">权值:"+minWeight);//当当前节点标记为已经访问visited[h2] = 1;minWeight = 10000;}}
}class MGragh{int verxs; //表示图的节点个数char[] data;//表示节点数据int [][] weight; //存放边 邻接矩阵public MGragh(int verxs){this.verxs = verxs;data = new char[verxs];weight = new int[verxs][verxs];}
}

数据结构与算法-普利姆算法(Prim) | 尚硅谷韩顺平相关推荐

  1. 数据结构第十二天——普利姆算法和迪杰斯特拉算法

    普利姆(Prim)算法求最小生成树,也就是在包含 n个顶点的连通图中,找出只有(n-1)条边包含所有 n个顶点的连通子图,也就是所谓的极小连通子图 最小生成树:给定一个带权的无向连通图,如何选取一棵生 ...

  2. 最小生成树算法普利姆算法和克鲁斯卡尔算法实现

    最小生成树算法: 普里姆算法:顶点集合N,辅助顶点集合S,初始化中,将出发点vi加入S,并从N中删除 1.从顶点集合N中找到一条到集合S最近的边(vi,vj),存储该边,并将vj从N移到S中 2.重复 ...

  3. 普利姆算法和修路问题

    修路问题 看一个应用场景和问题: 有胜利乡有7个村庄(A, B, C, D, E, F, G) ,现在需要修路把7个村庄连通 各个村庄的距离用边线表示(权) ,比如 A – B 距离 5公里 问:如何 ...

  4. 普利姆算法(prim)---(韩顺平数据结构)笔记

    普利姆算法 本质:求出从某一结点开始到达其他结点距离花费最少的组合 从图中指定顶点出发,寻找它相连的所有结点,比较这些结点的权值大小,然后连接权值最小的那个结点. 然后将寻找这两个结点相连的所有结点, ...

  5. 【数据结构】图的应用(普利姆算法、克鲁斯卡尔算法、迪杰斯特拉算法、弗洛伊德算法、拓扑排序)

    最小生成树 什么是最小生成树 是一棵树 - 无回路 - |V|个顶点一定有|V|-1条边 是生成树 - 包含全部顶点 - |V|-1条边全在图里 贪心算法 什么是"贪":每一步都要 ...

  6. Prim Algorithm(普利姆算法)

    Prim算法介绍 普里姆算法(Prim's algorithm),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点,且其所有边的权 ...

  7. Java普利姆算法(Prim)与克鲁斯卡尔算法(Kruskal)

    1.Java普利姆算法(Prim)与克鲁斯卡尔算法(Kruskal) 普利姆算法(Prim)与克鲁斯卡尔算法(Kruskal)求**最小生成树(极小连通子图)**的算法 1.1普利姆算法(Prim) ...

  8. 普利姆算法(Prim)

    给大家介绍一下普利姆算法, 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (g ...

  9. 普利姆(prim)算法与迪杰斯特拉(dijestella)算法

    一:普利姆(prim)算法 对于临界矩阵表示的图,时间复杂度为O(|V|2) 对于邻接表表示的图,时间复杂度为O(|V|+|E|) 代码: int dist[];//用来记录从原点到各个节点的距离 b ...

最新文章

  1. ubuntu 搜狗输入法成功安装
  2. sublime插件调用第三方程序
  3. [react] React16新特性有哪些?
  4. Linux系统里如何重装ibus,Linux下安装ibus-rime的方法
  5. 】.NET使用NPOI组件将数据导出Excel
  6. freemarker+生成java_Freemarker + xml 实现Java导出word
  7. Ubuntu10下SSH2协议安装
  8. TextWatcher实现输入关键字筛选数据
  9. 如何学习-如何学习数据库
  10. OSS文件存储方案-阿里云
  11. python识别图片上的文字_Python程序图片和pdf上文字识别实例
  12. python打印菱形_python打印菱形
  13. Gitter+Sidecar制作聊天室
  14. 基于python的音乐数据分析_基于Python的亚马逊音乐产品评论分析
  15. Uploadifive上传
  16. 【微软 Azure 认知服务】零基础搭建微软 Azure AI 认知服务实验分享
  17. 金蝶云苍穹集成服务云,让企业数据自由流动
  18. SDRAM芯片中的DQM信号的理解
  19. Sql 修改表结构的操作
  20. 苹果一直显示无法连接服务器,苹果6plus无法连接服务器是怎么回事?

热门文章

  1. 透过微信浏览器看开源问题
  2. 深入学习用 Go 编写 HTTP 服务器
  3. 男生心疼女生的12种方式
  4. linux屏幕伽马值设置,设置计算机显示屏的亮度和对比度伽玛值
  5. POJ,3713 Transferring Sylla
  6. 教你编写DOTA外挂
  7. 连通图 P3387 缩点 模板
  8. 关键决策——策略模式
  9. 搭建自己的ngrok服务(内网穿透 使用简单)
  10. visio2013都提示“正在配置请稍后”