普里姆算法(修路问题)+图解

图解

在这里插入图片描述

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

代码实现

package com.atguigu.prim;import java.util.Arrays;/*** @创建人 wdl* @创建时间 2021/4/5* @描述*/
public class PrimAlgorithm {public static void main(String[] args) {//测试看看图是否创建OKchar[] data = {'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对象MGraph graph = new MGraph(verxs);//创建一个MinTree对象MinTree minTree = new MinTree();minTree.createGraph(graph,verxs,data,weight);//输出minTree.showGraph(graph);//测试普里姆算法minTree.prim(graph,0);}}//创建最小生成树->村庄的图
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 表示从图的第几个顶点开始生成'A'->0 'B'->1....*/public void prim(MGraph graph,int v){//visited[]标记节点是否被访问过int[] visited = new int[graph.verxs];//visited[] 默认元素的值都是0,表示没有访问过
//        for (int i = 0; i < graph.verxs; i++) {
//            visited[i]=0;
//        }//把当前这个节点标记为已访问visited[v]=1;//h1和h2记录两个顶点的下标int h1=-1;int h2=-1;int minWeight=10000;//将minWeight初始成一个大数,后面遍历过程中,会被替换for (int k = 1; k < graph.verxs; 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;//minWeight重新设置为一个最大值10000minWeight=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/326542.shtml

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

相关文章

ssm使用全注解实现增删改查案例——DeptServiceImpl

/** * Title: DeptServiceImpl.java * Package org.service.impl * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2018-3-12 上午11:04:09 * version V1.0 */ package org.service.impl;import java.util.List;import org.…

MySQL存储引擎中MyISAM和InnoDB区别

转载自 MySQL存储引擎中MyISAM和InnoDB区别 MyISAM 和InnoDB 讲解   InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型&#xff0c;这两个表类型各有优劣&#xff0c;视具体应用而定。基本的差别为&#xff1a;MyISAM类型不支持事务处理等高级处理&#xff0c;而Inn…

excel如何生成mysql的sql语句_excel 批量生成SQL语句

文章来源&#xff1a;https://www.cnblogs.com/allen0118/p/3726455.html我们经常会遇到这样的要求&#xff1a;用户给发过来一些数据&#xff0c;要我们直接给存放到数据库里面&#xff0c;有的是Insert&#xff0c;有的是Update等等&#xff0c;少量的数据我们可以采取最原始…

Visual Studio 2017 已知问题 Qamp;amp;A

已知问题 以下是有关此版本中的已知问题和可用解决方法的说明。M姐会给大家进行详细的解答 安装问题编辑器和 IDE 问题NuGet 问题实时单元测试问题测试工具问题轻量级解决方案加载问题Web 工具已知问题.NET Core 工具问题“打开文件夹”问题扩展性问题Application Insights 问题…

2017蓝桥杯省赛---java---B---8(包子凑数)

题目描述 标题&#xff1a;包子凑数小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有N种蒸笼&#xff0c;其中第i种蒸笼恰好能放Ai个包子。每种蒸笼都有非常多笼&#xff0c;可以认为是无限笼。每当有顾客想买X个包子&#xff0c;卖包子的大叔就会迅速选出若干笼包…

ssm使用全注解实现增删改查案例——EmpServiceImpl

package org.service.impl;import java.util.List;import org.dao.IEmpMapper; import org.entity.Emp; import org.service.IEmpService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component;//注入事务 Compo…

InnoDB 的辅助索引叶子节点为什么不直接保存的记录地址而要存主键键值

转载自 InnoDB 的辅助索引叶子节点为什么不直接保存的记录地址而要存主键键值 RT&#xff0c;最近看书关于innodb的 InnoDB是索引组织表&#xff0c;所以完整的数据记录都存在聚集索引的叶子节点上 辅助索引的叶子节点保存的是对应的主键键值&#xff0c;而另外一种存储引擎m…

java 配置mybatis_java mybatis框架的配置

一个框架的使用&#xff0c;必然离不开其中的组件支持。我们在下载完mybatis框架后&#xff0c;因为大部分的内部结构还没有启动&#xff0c;就要手动的对其进行配置。在之前有提到&#xff0c;mybatis框架的作用就有数据库方面的&#xff0c;所以本篇文章带来了数据库和sql方面…

2017蓝桥杯省赛---java---B---9(分巧克力)

题目描述 标题&#xff1a; 分巧克力儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。小明一共有N块巧克力&#xff0c;其中第i块是Hi x Wi的方格组成的长方形。为了公平起见&#xff0c;小明需要从这 N 块巧克力中切出K块巧克力分给小朋友们。切出的…

C#7.0之ref locals and returns (局部变量和引用返回)

首先我们知道 ref关键字是将值传递变为引用传递 那么我们先来看看ref locals(ref局部变量) 列子代码如下: static void Main(string[] args) { int x 3; ref int x1 ref x; //注意这里,我们通过ref关键字 把x赋给了x1 x1 2; Console.WriteLine($"改变后的变量 {nameo…

ssm使用全注解实现增删改查案例——applicationContext-servlet.xml

<?xml version"1.0" encoding"UTF-8"?> <beansxmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:p"http://www.springframework.org/schema/p"xm…

insert ... on duplicate key update产生death lock死锁原理

转载自 insert ... on duplicate key update产生death lock死锁原理 前言 编辑 我们在实际业务场景中&#xff0c;经常会有一个这样的需求&#xff0c;插入某条记录&#xff0c;如果已经存在了则更新它如果更新日期或者某些列上的累加操作等&#xff0c;我们肯定会想到使用I…

java notify 指定_java的notify/notifyAll:如何notify指定的线程?

我尝试用ArrayList做生产者-消费者问题&#xff0c;有多个生产者&#xff0c;多个消费者&#xff0c;用wait、noitify、notifyAll做并发控制。当生产者生产完毕后&#xff0c;如何只notify消费者呢&#xff1f;你确保只有消费者在wait&#xff0c;这样notify就只会通知消费者了…

2018蓝桥杯省赛---java---B---4(测试次数)

题目描述 思路分析 最佳策略、最坏运气 打表法 代码实现 package com.atguigu.TEST;class Main{public static void main(String[] args) {int[][] d new int[1001][4];//有j个手机测试i层楼需要扔几次for (int i 1; i < 1000; i) {d[i][1]i;//1个手机扔i次可以测试i层…

ssm使用全注解实现增删改查案例——applicationContext.xml

<?xml version"1.0" encoding"UTF-8"?> <beansxmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:p"http://www.springframework.org/schema/p"xm…

[干货来袭]C#7.0新特性(VS2017可用)

前言 微软昨天发布了新的VS 2017 ..随之而来的还有很多很多东西... .NET新版本 ASP.NET新版本...等等..太多..实在没消化.. 分享一下其实2016年12月就已经公布了的C#7.0的新特性吧,虽然很早就出来了,但咱这IDE不支持啊.. 不过在昨天的VS2017中已经完美可以支持使用了. E文好的,…

java version 和javac版本不一致_解决linux下javac -version和java -version版本显示不一致...

[javascript] view plaincopy[rootlocalhost usr]# $JAVA_HOME/bin/java -versionbash: /bin/java: 没有那个文件或目录[rootlocalhost java]# . /etc/profile[rootlocalhost java]# . /etc/profile[rootlocalhost java]# $JAVA_HOME/bin/java -versionjava version "1.6.…

在MySQL的InnoDB存储引擎中count(*)函数的优化

转载自 在MySQL的InnoDB存储引擎中count(*)函数的优化 写这篇文章之前已经看过了很多数据库方面的优化内容&#xff0c;大部分都是加索引、使用事务、要什么select什么等等。然而&#xff0c;只是停留在阅读的层面上&#xff0c;很少有实践&#xff0c;因为没有遇到真实的项目…

2018蓝桥杯省赛---java---B---6(递增三元组)

题目描述 标题&#xff1a;递增三元组给定三个整数数组 A [A1, A2, ... AN], B [B1, B2, ... BN], C [C1, C2, ... CN]&#xff0c; 请你统计有多少个三元组(i, j, k) 满足&#xff1a;1. 1 < i, j, k < N 2. Ai < Bj < Ck 【输入格式】 第一行包含一个整…

后端架构高可用可伸缩讲解之高可用

去年参加了一个技术分享活动&#xff0c;七牛的一个技术大牛给简要的介绍了一些高可用可伸缩的一些最佳实践&#xff0c;虽然只是一次简短的介绍&#xff0c;但是依然从中学到了很多东西&#xff0c;PPT内容主要分以下几个部分: 入口层高可用业务层高可用缓存层高可用数据库高可…