Prim算法求图的最小生成树(Java)
package Algorithm.prim;import java.util.Arrays;/*** 普利姆算法解决最小生成树问题
Prim算法的实现过程
首先以一个结点作为最小生成树的初始结点,然后以迭代的方式找出最小生成树中各结点权重最小的边,并加到最小生成树中。(加入之后如果产生回路了就要跳过这条边,选择下一个结点)当所有的结点都加入到最小生成树中后,就找出了这个连通图的最小生成树*/
public class PrimAlgorithm {public static void main(String[] args) {char[] data = {'A','B','C','D','E','F','G'};int verxs = data.length;int[][] weight = {{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对象MGraph mGraph = new MGraph(verxs);//创建最小生成树对象MinTree minTree = new MinTree();minTree.createGraph(mGraph,verxs,data,weight);minTree.showGraph(mGraph);minTree.prim(mGraph,0);}
}//创建最小生成树,即村庄的图
class MinTree {/*** 创建图* @param graph 图对象* @param verxs 图对应的顶点个数* @param data 图中各个顶点的值* @param weight 图的邻接矩阵*/public void createGraph(MGraph graph, int verxs, char data[], int[][] weight) {for ( int i = 0; i < verxs; i++ ) {graph.data[i] = data[i];for ( int j = 0; j < verxs; j++ ) {graph.weight[i][j] = weight[i][j];}}}/*** Prim算法得到最小生成树* @param graph 图* @param v 从图的某个顶点开始搜索*/public void prim( MGraph graph, int v ) {int[] visited = new int[graph.verxs]; // 标记节点是否被访问过:0表示没有访问过,1表示已经访问。visited[v] = 1;//h1 和 h2 记录两个顶点的下标int h1 = -1;int h2 = -1;int minWeight = 10000;for ( int k = 1; k < graph.verxs; k++ ) {for (int i = 0; i < graph.verxs; i++){ // i表示被访问过的节点for (int j = 0; j < graph.verxs; j++){ // j表示未被访问的节点if (visited[i] == 1 && visited[j] == 0 && graph.weight[i][j] < minWeight) {minWeight = graph.weight[i][j]; //寻找已访问节点和未被访问节点之间权值最小的边h1 = i;h2 = j;}}}System.out.println("边<"+graph.data[h1]+","+graph.data[h2]+"> 权值:"+minWeight);//将当前找到的节点标记为1visited[h2] = 1;minWeight = 10000;}}/*** 显示图的邻接矩阵* @param graph*/public void showGraph(MGraph graph) {
// for (int i = 0; i < graph.verxs; i++){
// for (int j = 0; j < graph.verxs; j++){
// System.out.printf("%d ",graph.weight[i][j]);
// }
// System.out.println();
// }for (int[] link: graph.weight){System.out.println(Arrays.toString(link));}}
}class MGraph {int verxs; // 表示图的节点个数char[] data; // 存放节点数据int[][] weight; // 存放边,即邻接矩阵public MGraph(int verxs) {this.verxs = verxs;data = new char[verxs];weight = new int[verxs][verxs];}
}
Prim算法求图的最小生成树(Java)相关推荐
- prim求最短路径C语言,[图论]Prim算法求最小支撑树和最短路径
这个是以前所学,现在总结成博文一篇. 对于图论中的求解最小支撑树问题和最短路径问题都有比较经典的算法,比如最小支撑树可以采用"破圈法",求解最短路径可以用"Dijkstr ...
- 对下图所示的连通网络G,用克鲁斯卡尔(Kruskal)算法求G的最小生成树T,请写出在算法执行过程中,依次加入T的边集TE中的边。说明该算法的基本思想及贪心策略,并简要分析算法的时间复杂度
对下图所示的连通网络G,用克鲁斯卡尔(Kruskal)算法求G的最小生成树T,请写出在算法执行过程中,依次加入T的边集TE中的 边.说明该算法的基本思想及贪心策略,并简要分析算法的时间复杂度
- Java 版 Prim 算法求最小生成树
最小生成树: 一个具有n个顶点的加权的无相连通图,用n-1条边连接这n个顶点,并且使得连接之后的所有边的权值之和最小的树. Prim算法:先以一个结点作为最小生成树的第一个结点,然后以迭代的方式找出与 ...
- AcWing 858. Prim算法求最小生成树(稠密图)
题目链接 https://www.acwing.com/problem/content/description/860/ 思路 prim算法的思想就是,我们维护一个最优集合,然后寻找所有不在集合的点连 ...
- Prim算法 求出 最小生成树
MST(Minimum Spanning Tree,最小生成树)问题有两种通用的解法,Prim算法就是其中之一,它是从点的方面考虑构建一颗MST,大致思想是:设图G顶点集合为U,首先任意选择图G中的一 ...
- 【数据结构与算法】图结构最小生成树Kruskal算法的Java实现
Kruskal算法 Kruskal算法是图论中用于求解最小生成树的算法,算法时间复杂度为O(eloge) 比较起Prim算法,Kruskal算法虽然同求最小生成树,却更适合稀疏网. 这里图的储存结构建 ...
- prim算法_图的生成树之最小生成树(Prim)
树一般来说是基于图而生的,而树是一种特殊的图:无环连通图. 定义1:对于无向图G和一棵树T来说,若T中与G中所包含的节点相同,但是边不相同,且T恰好是无环的连通图,那么称T为G的生成树. 对于图的生成 ...
- prim算法求最小生成树_最小生成树的两种方法(Kruskal算法和Prim算法)
关于图的几个概念定义: 连通图:在无向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该无向图为连通图. 强连通图:在有向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该有向图为强连 ...
- Prim算法求最小生成树
一.Prim算法 prim算法是用来求最小生成树的问题具体就是在一个图的n个节点找到n-1条边,使这n-1条边的权值最小 二.修路问题 在狗熊岭有如下七个村庄 村庄道路连接情况和距离如图所示 现在需要 ...
最新文章
- 易观与用友推出云融合产品“智能用户运营”,掀开数字营销技术新篇章
- 技术社区,你真的会混吗?
- personal-index 我的个人主页的介绍
- 使用Installshield制作asp,asp.net应用的安装程序
- [论文笔记]CVPR2017_Joint Detection and Identification Feature Learning for Person Search
- java 自动装载_java_详解Java的Spring框架下bean的自动装载方式,Spring容器可以自动装配相互协 - phpStudy...
- C#里的三种定时器类型
- SqlServer查询出数据库中所有的表及其字段属性
- Axure RP 9基础教程(3)——添加图标元件
- 本地搭建Redis集群 windows(图文详解)
- BIN文件和HEX文件区别
- 给机器人罗宾写一封英语回信_小学英语人教(13版三起点)六年级上册Unit1
- vue在日历中使用 tippyjs 来做悬浮弹框自定义插入html
- spring interation学习-01发送jms消息
- 2022-2028全球与中国紫外线点固化系统市场现状及未来发展趋势
- 勇敢猿猿不怕困难!为去大厂我把这个Java大厂面试真题刷了几十遍!(2021最新版)
- 关于Office 365开发者订阅无法注册的说明
- gif文件太大怎么办?gif动图如何在线压缩?
- eclipse配置python开发环境_如何在Eclipse中配置python开发环境
- Android桌面管理