算法 - 普里姆算法(修路问题求解)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

从A开始,A作为定点,找到与A相连并且未被处理(不在顶点集合中)的进行处理,找到权值最小的并加入集合,A-C[7]、A-G[2]、A-B[5],最小的是A-G[2],所以把G加入集合,这里是有A-G的连接的。

然后把A、G作为顶点,找到与A、G相连未被处理的进行处理,A-C[7]、A-B[5]、G-E[4]、G-B[3]、G-F[6],最小的是G-B[3],把B加入集合,

直到全部遍历完成!

在这里插入图片描述

代码

package Algorithm.prim;import java.util.Arrays;public class PrimAlgorihm {public static void main(String[] args) {char data [] = new char[]{'A','B','C','D','E','F','G'};int verxs = data.length;int weight [][] = new int[][]{{10000,5,7,10000,10000,10000,2},{5,10000,10000,9,10000,10000,3},{7,10000,10000,10000,8,10000,1},{10000,9,10000,10000,10000,4,1},{10000,10000,8,10000,10000,5,4},{10000,10000,10000,4,5,10000,6},{2,3,10000,10000,4,6,10000},};MGraph mGraph = new MGraph(verxs);MinTree minTree = new MinTree();minTree.createGraph(mGraph,verxs,data,weight);minTree.showGraph(mGraph);//测试普里姆算法minTree.prim(mGraph,6);}
}//创建最小生成树 ->
class MinTree{//创建图的邻接矩阵/**** @param graph 图对象* @param verxs 顶点个数* @param data  各个顶点的值* @param weight 图的邻接矩阵*/public void createGraph(MGraph graph, int verxs, char [] data, int weight [][]){int i,j;for (i = 0; i < verxs; i++) {graph.data[i] = data[i];for (j = 0; j < verxs; j++){graph.weight[i][j] = weight[i][j];}}}//显示图的邻接矩阵public void  showGraph(MGraph graph){for (int [] link : graph.weight){System.out.println(Arrays.toString(link));}}//编写prim算法,得到最小生成树/**** @param graph 图* @param v 从图的哪个顶点开始生产*/public void prim(MGraph graph, int v){//visited[] 标记顶点是否被访问过,默认都为0int visited [] = new int[graph.verxs];//把当前节点标记为以访问visited[v] = 1;//用h1和h2记录两个顶点的下标int h1 = -1;int h2 = -1;int minWeight = 10000;//将minWeight先初始化为一个大数,后面遍历过程中会被替换for (int k = 0; k < graph.verxs -1; k++) {//因为有graph.verxs顶点,普里姆算法结束后,有graph.verxs-1边//这个是确定每一次生成的子图,和哪个节点的距离最近//就是把所有的节点都给遍历了,所有的线都遍历一遍,找到与当前顶点相连的未被访问过的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(寻找已经访问过的节点和未访问过的节点之间的权值最小的)minWeight = graph.weight[i][j];h1 = i;h2 = j;}}}//找到一条边是最小的System.out.println("边 <" + graph.data[h1]+","+graph.data[h2]+"> 权值:" + minWeight);//把当前节点标记为已经访问过visited[h2] = 1;//重置minWeightminWeight = 10000;}}
}
class MGraph{int verxs; //图的节点个数char[] data;//保存节点数据int[][] weight;//存放边,邻接矩阵public MGraph(int verxs) {this.verxs = verxs;data = new char[verxs];weight = new int[verxs][verxs];}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437514.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】什么是 Azure 资源管理器

什么是 Azure 资源管理器&#xff1f; 2020/09/01 Azure 资源管理器是 Azure 的部署和管理服务。 它提供了一个管理层&#xff0c;用于在 Azure 帐户中创建、更新和删除资源。 部署后&#xff0c;可以使用访问控制、锁和标记等管理功能来保护和组织资源。 若要了解 Azure 资源…

算法 -克鲁斯卡尔算法

如果形成回路则不选择 文字描述 加入的边的两个顶点不能都指向同一个终点&#xff0c;否则会构成回路

【转】Azure基本核心服务计费

虚拟机的计费 您只需花几分钟的时间便可在 Azure 管理平台上&#xff0c;根据您的需求创建从一个到数千个的虚拟机实例。 Azure 支持多种规模的虚拟机&#xff0c;通过支持 Linux, Windows, SQL Server, Oracle 和 SAP 等为客户提供了多种虚拟化的灵活性以实现各种计算解决方…

【转】整整30天终于走完,分享下我的昆山人才引进落户经历

【 摘自昆山论坛网友&#xff1a;苏格拉底的苏 】 落户共用了一个月左右时间&#xff1a; 从10月30号开始&#xff0c;今天11月28号结束。 整整30天&#xff0c;人才引进落户之路终于走完。 速度还是挺快的&#xff0c;其中审核时间花了27天&#xff0c;从11月25日收到复审通过…

Azkaban运行报错:我找到的几个错误问题

ERROR - Failed to build job executor for job xxxxxJob type command ’ is unrecognized. Could not construct 出现上面错误信息&#xff1a;我遇到的bug 1.job文件每行最后末尾看看有没有空格&#xff0c;有空格就出错 我用notepad编辑的打开下面这个 这样就是没空格&a…

【转】MVVM大比拼小结

目前完成4篇源码分析文章&#xff1a; MVVM大比拼之knockout.js源码精析MVVM大比拼之avalon.js源码精析MVVM大比拼之vue.js源码精析MVVM大比拼之AngularJS源码精析 分析所关注的点集中在 &#xff1a;双工绑定的实现机制、视图编译等几个关键点。建议读者从knockout开始按顺序…

Idea Maven报错找不到程序包

程序本来可以运行的好好的&#xff0c;突然不知道什么原因就不行了&#xff0c;两次了 网上找各种方法式&#xff0c;最终两次的解决办法都是同一个&#xff0c;但是什么原因造成的目前并不知道 1.打开Maven 点击Lifecycle下的clean然后点击install 2. 在控制台输入 mvn idea…

WebStrom里设置angular提示,可以在html中提示ts文件的内容

下面这样就是可以提示到 在settings->languages&frameworks->javaScript->Libraries 下把你的工程添加进去 这是我添加进来的&#xff0c;Type类型为project 我改了中文

【转】关于字符编码,你所需要知道的

字符编码的问题看似很小&#xff0c;经常被技术人员忽视&#xff0c;但是很容易导致一些莫名其妙的问题。这里总结了一下字符编码的一些普及性的知识&#xff0c;希望对大家有所帮助。 还是得从ASCII码说起 说到字符编码&#xff0c;不得不说ASCII码的简史。计算机一开始发明…

【转】刨根究底字符编码之一——关键术语解释(上)

声明&#xff1a;本系列文章参考了网上的大量资料&#xff0c;除了少部分资料由于未作大量修改(但基本也有少量修改&#xff0c;因为网上文章随意性较大&#xff0c;如若不改反而让人迷糊)而标明了出处之外&#xff0c;其余由于已作了大量改写&#xff0c;因此没有再一一说明&a…

【转】刨根究底字符编码之零——前言

前言 一、 字符编码是计算机世界里最基础、最重要的一个主题之一。不过&#xff0c;在计算机教材中却往往浮光掠影般地草草带过&#xff0c;甚至连一本专门进行深入介绍的著作都找不到&#xff08;对这一点我一直很困惑&#xff0c;为什么就没有哪位大牛对这个如此基础、重要…

JAVA使用ByteArrayOutputStream、ByteArrayInputStream将对象序列化反序列化,通过JAVA socket实现对象在网络中传输

1.序列化和反序列化&#xff1a; 序列化是对象(类的实例)转换成字节数组或者字符串通过网络传输或者存储到本地文件。反序列化&#xff1a;就是将字节数组或字符串在转换成对象实例的过程。&#xff08;因为在网络中传输或者写本地文件&#xff0c;是不能使用对象的&#xff0…

【转】刨根究底字符编码之二——关键术语解释(下)

关键术语解释(下) 如前所述&#xff0c;现代字符编码模型共分为5层&#xff0c;下面分层进行简要介绍。 一、第1层 抽象字符表ACR (Abstract Character Repertoire抽象字符清单)&#xff1a;明确字符的范围(即确定支持哪些字符) 1. 抽象字符表ACR是一个编码系统支持的所有抽…

【转】刨根究底字符编码之三——字符编码的由来

字符编码的由来 一、为什么需要对字符进行编码 1. 计算机一开始发明出来时是用来解决数字计算问题的&#xff0c;后来人们发现&#xff0c;计算机还可以做更多的事&#xff0c;例如文本处理。 但计算机其实挺“笨”的&#xff0c;它只“认识”010110111000…这样由0和1两个数…

SpringMVC配置没问题却却找不到页面,页面显示404

在Artifacts下此工程下新建一个lib文件夹&#xff0c;存放jar包&#xff0c;因为idea新建modules的时候不是直接创建的web项目&#xff1a; 选中lib点加号把jar导入进去&#xff0c;然后重启tomcat

【转】刨根究底字符编码之四——EASCII及ISO 8859字符编码方案

1. 计算机出现之后&#xff0c;首先逐渐从美国发展到了欧洲。由于欧洲很多国家所用到的字符中&#xff0c;除了基本的、美国也用的那128个ASCII字符之外&#xff0c;还有很多衍生的拉丁字母等字符。比如&#xff0c;在法语中&#xff0c;字母上方有注音符号&#xff1b;而欧洲…

tomcat乱码问题解决

tomcat安装目录下conf文件夹下的logging.properties文件&#xff0c;将java.util.logging.ConsoleHandler.encoding编码为GBK&#xff0c;如图&#xff1a;

【转】HMAC哈希消息认证码及算法原理

HMAC算法原理 HMAC算法是一种基于密钥的报文完整性的验证方法 &#xff0c;其安全性是建立在Hash加密算法基础上的。它要求通信双方共享密钥、约定算法、对报文进行Hash运算&#xff0c;形成固定长度的认证码。通信双方通过认证码的校验来确定报文的合法性。 HMAC算法可以用来…

RestFul风格学习

传统的url是这样的 RestFul是这样的

Angular使用Console.log()打印出来的数据没问题,点击详情后数据变了

我在一个界面添加数据使用updataEvent将对象返回给另一个界面后&#xff0c;在onUpData中处理时使用 this.xxxxx d&#xff0c;直接将地址值给了变量&#xff0c;当这个方法结束后d被重置了&#xff0c;所以this.xxx的值也消失了,这里要使用下面的方法复制一个对象出来。 this…