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

图解

在这里插入图片描述

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

代码实现

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,一经查实,立即删除!

相关文章

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;卖包子的大叔就会迅速选出若干笼包…

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…

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

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

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层…

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

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

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

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

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

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

2019蓝桥杯省赛---java---B---1(组队)

题目描述 【问题描述】作为篮球队教练&#xff0c;你需要从以下名单中选出 1 号位至 5 号位各一名球员&#xff0c;组成球队的首发阵容。每位球员担任 1 号位至 5 号位时的评分如下表所示。请你计算首发阵容 1 号位至 5 号位的评分之和最大可能是多少&#xff1f;&#xff08;…

Asp.Net Core Authentication Middleware And Generate Token

或者应该包含什么信息呢&#xff1f; 1.这个人是谁&#xff1f; 2.这个人可以用此token访问什么样的内容&#xff1f;&#xff08;scope&#xff09; 3.token的过期时间 (expire) 4.谁发行的token。 5.其他任何你希望加入的声明&#xff08;Claims&#xff09; 那我们为什么要使…

数据库 - 事务管理(ACID)隔离级别 事务传播行为

转载自 数据库 - 事务管理&#xff08;ACID&#xff09;隔离级别 事务传播行为 总览&#xff1a; 事务的4大特性&#xff08;ACID) 原子性&#xff08;Atomicity&#xff09;   原子性是指事务包含的所有操作要么全部成功&#xff0c;要么全部失败回滚&#xff0c;这和前…

克鲁斯卡尔算法(公交站问题)

应用场景 思路分析 代码实现 package com.atguigu.kruskal;import java.util.Arrays;/*** 创建人 wdl* 创建时间 2021/4/6* 描述*/ public class KruskalCase {private int edgNum;//边的个数private char[] vertexs;//顶点数组private int[][] matrix;//邻接矩阵//使用INF表示…

分布式系列文章——Paxos算法原理与推导

Paxos算法在分布式领域具有非常重要的地位。但是Paxos算法有两个比较明显的缺点&#xff1a;1.难以理解 2.工程实现更难。 网上有很多讲解Paxos算法的文章&#xff0c;但是质量参差不齐。看了很多关于Paxos的资料后发现&#xff0c;学习Paxos最好的资料是论文《Paxos Made Simp…

java的jdbc驱动server_win7下java用jdbc驱动来连接sql server的方法 (转载)

第一步&#xff1a;下载安装Microsoft SQL Server 2000 Service Pack 4&#xff0c;也就是sql2000的sp4补丁地址如下&#xff1a;第二步&#xff1a;下载jdbc的驱动,解压到任一位置中&#xff0c;下载地址&#xff1a;第三步&#xff1a;就是创建一个java工程&#xff0c;再在w…

2018蓝桥杯省赛---java---B---7(螺旋折线)

题目描述 标题&#xff1a;螺旋折线如图p1.png所示的螺旋折线经过平面上所有整点恰好一次。 对于整点(X, Y)&#xff0c;我们定义它到原点的距离dis(X, Y)是从原点到(X, Y)的螺旋折线段的长度。 例如dis(0, 1)3, dis(-2, -1)9 给出整点坐标(X, Y)&#xff0c;你能计算出dis…

微软的.NET Core开始支持Raspberry Pi 3

微软的 .NET Core 正在向 Raspberry Pi 3 发展&#xff0c;并且适用于 ARM 设备的官方 .NET 2.0 核心将于今年晚些时候发布。微软最近开放了 .NET 核心的编程框架&#xff0c;目前的 ARM32 版本&#xff0c;在 Github 上可用&#xff0c;是多方合作的产物。 一位微软发言人告诉…

轩辕剑之天之痕1-5java_轩辕剑游戏 轩辕剑1到5全系列下载

第 5 页 轩辕剑3外传&#xff1a;天之痕【轩辕剑3外传&#xff1a;天之痕(2000)】本作可以说是轩辕剑最有名气的作品&#xff01;&#xff01;&#xff01;没错&#xff0c;一直以来轩辕剑名声最响亮的一部作品就是《天之痕》&#xff0c;到现在电视剧也终于拍出来了&#xff0…