primAlgorithm普利姆算法

primAlgorithm普利姆算法

  • 背景
  • 代码实现(Java)

背景

  • 修路问题(最短路径)

代码实现(Java)

package test01;import java.util.Arrays;/** 普利姆算法解决修路最短路径的问题* 满足条件为:* 1要把所有的地点都连接,总有一条路径我能到另外一个地点* 2要求总的连接路径长度最短* 算法基本思路:最小生成树* 选择一个起始点,开始搜索,选择路径最短的连接,然后标记已连接的点。下次选择从已标记的点的相邻点出发* 选择最短的路径,循环此过程,直到全部点遍历完。*/
public class primeAlgorithm {public static void main(String args[]) {char[] data = new char[] {'A','B','C','D','E','F','G'};//矩阵中的100代表两点之间无法直接到达int[][] weight=new int[][] {{100,5,7,100,100,100,2},{5,100,100,9,100,100,3},{7,100,100,100,8,100,100},{100,9,100,100,100,4,100},{100,100,8,100,100,5,4},{100,100,100,4,5,100,6},{2,3,100,100,4,6,100},};int verxs=data.length;MGraph graph=new MGraph(verxs);MinTree minTree=new MinTree();minTree.creatGraph(graph, verxs, data, weight);minTree.showGraph(graph);minTree.prim(graph, 0);}}
class MinTree{//创建图的临接矩阵/** graph: 图对象* verxs:图的质点个数* data: 图中各质点的值* weight:图的邻接矩阵*/public void creatGraph(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));}}public void prim(MGraph graph,int v) {int visited[]=new int[graph.verxs];//java中默认int数组元素为0;否则就要人为for循环遍历visited[v]=1;//起始点为1,因为已经遍历。int h1 = -1;int h2 = -1;int minWeight = 10000;//存储一个大值,后面遍历过程会被替代for(int k=1;k<graph.verxs;k++) {//因为至少要有verxs-1条边,所以寻找verxs-1次//遍历已经访问过的结点for(int i = 0;i<graph.verxs;i++) {//遍历没有访问的结点for(int j=0;j<graph.verxs;j++) {if(visited[i]==1 && visited[j]==0 && graph.weight[i][j]<minWeight) {minWeight = graph.weight[i][j];//寻找访问过程中长度最小的邻边,替换minweighth1=i;//记录访问起点h2=j;//记录访问终点}}}System.out.println("边<"+graph.data[h1]+","+graph.data[h2]+">权值:"+minWeight);//将已经访问的结点进行标记visited值为1visited[h2]=1;minWeight=10000;}}
}
class MGraph{int verxs;//图结点个数char[] data;//存放结点的数据ABCDEFGint[][] weight;//存放边的长度,即为相邻的矩阵public MGraph(int verxs) {this.verxs=verxs;data = new char[verxs];		//用来存放地点的名称weight = new int[verxs][verxs];//用来定义边的长度,如果不相邻就定义为无穷大或者其他大数}}

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

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

相关文章

【fido2100:工业自动化新标杆——高性能DLR交换机引领精准时间同步新时代】

在现代工业自动化和通信网络中&#xff0c;对于高速、稳定和精准的时间同步有着极高的要求&#xff0c;随着工业4.0的提出和智能制造的发展&#xff0c;工业以太网应运而生&#xff0c;而在工业以太网之中交换机是保证通信稳定的重要的一环。工业以太网交换机广泛应用于工业控制…

html+CSS+js部分基础运用13

一、三级联动 效果如下图所示&#xff1a; 图1 三级联动 二、设计江苏福彩投注站彩票投注助手 编程实现江苏福彩投注站彩票投注助手&#xff0c;页面布局效果如图2所示。 图2福彩投注站彩票助手页面 功能要求如下&#xff1a; 单击“机选1注”、“机选5注”或“机选10注”…

一周速览丨YOLOv10 模型+应用一站式体验!一键部署 Llama 3-Chinese-Chat-8b

公共资源速递 This Weekly Snapshots &#xff01;5 个数据集&#xff1a; Llama3 中文化数据集皮马印第安人糖尿病数据集VehicleID 车辆识别数据集LCCC 大规模净化汉语会话语料库NWPU VHR-10 地理空间物体检测遥感数据集 2 个模型&#xff1a; YOLOv10Llama 3-Chinese-Cha…

QT入门知识回顾

1 QT简介 1.1 Qt模块: Qt Core模块: 是QT类库的核心&#xff0c;所有其他模块都依赖这个模块 Qt Gui模块: 提供GUI程序的基本功能 Qt Network模块:提供跨平台的网络功能 Qt Widgets模块:提供创建用户界面的功能 1.2Qt的signal/slot机制 任何一个类只要类体前部书写 Q_OBJ…

香港移民政策放开了,2024拿香港身份的8种方式,申请条件解读

​香港移民政策放开了&#xff0c;2024拿香港身份的8种方式&#xff01; 都2024年了&#xff0c;香港身份还受欢迎吗&#xff1f; 当然受欢迎&#xff0c;我们从数据上就能看出来&#xff0c;去年有超过24万人通过各类人才引入计划申请来港&#xff0c;其中超过14万获批&…

三生随记——作家的噩梦

月光斑驳&#xff0c;李轩独坐于老屋的木桌前&#xff0c;四周的静谧被笔尖划过纸张的沙沙声打破。作为一个小有名气的作家&#xff0c;他的文字总是充满魔力&#xff0c;让读者深陷其中。但今晚&#xff0c;他的故事似乎有些不同寻常。 故事的主角&#xff0c;一个名叫林浩的探…

Java虚拟机的优化方法

随着时间的推移&#xff0c;许多优化已经提高了 JVM 的性能。然而&#xff0c;尽管 Java 通常是第一个成功实现它们的虚拟机&#xff0c;但它们也经常被用于其他类似的平台。 1.即时编译 早期的 JVM 总是解释 Java 字节码。在普通应用程序中&#xff0c;Java 的性能损失比 C …

静态网页实现-人脸识别-案例(web)

&#x1f933;人脸识别&#xff08;web) 基于开源大模型&#xff0c;将人脸识别功能整合到网页中&#xff0c;提供用户友好的界面和强大的功能。 核心功能 人脸轮廓识别&#xff1a; 通过深度学习算法&#xff0c;精确识别人脸的轮廓&#xff0c;包括眼睛、鼻子、嘴巴等关键部…

Sql注入漏洞汇总-上

产生的原因 当web应用向后台数据库传递SQL语句进行数据库操作时,如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,带入数据库中进行查询,从而导致数据的泄露或者修改。 02 分类 1、按照查询的类型分类 数字型 select * from user whe…

在QML中调用 C++ 函数的方法(四)

文章目录 前言一、qml 和 c++ 交互的官方文档介绍二、QML 中调用 C++ 实现的函数的方法1. Exposing Attributes of C++ Types to QML1.1 暴露 Properties1.2 暴露 Methods(槽函数和Q_INVOKABLE 修饰的函数)1.3 暴露 Signals2. Defining QML Types from C++3. 代码实例3.1 创建一…

【OpenHarmony】ArkTS 语法基础 ③ ( @Component 自定义组件生命周期回调函数 | @Entry 页面生命周期回调函数 )

文章目录 一、ArkTS Component 自定义组件生命周期1、自定义组件生命周期2、aboutToAppear 函数执行时机和作用3、aboutToDisappear 函数执行时机和作用4、代码示例 二、ArkTS Entry 页面生命周期1、Entry 页面生命周期2、onBackPress 和 onPageHide 回调函数无关联 三、代码示…

文化若想挣钱,真的很可怕吗?

文化若想挣钱&#xff0c;真的很可怕吗&#xff1f; 近日&#xff0c;我看到受人尊敬的静思有我先生的一个音频作品《会挣钱&#xff0c;遇上有文化&#xff0c;这个地方很可怕》&#xff0c;把这个标题在网上搜一搜&#xff0c;在它下面就跟着有这样一篇文章--商人不可怕&…

vscode 1.85安装remote-ssh后左侧没有图标

vscode安装remote-ssh插件后左侧没有图标。 解决方法 想要左侧有图标&#xff0c;是另一个插件起作用&#xff1a;Remote Explorer 但是这个插件最新版需要1.87&#xff0c;可以switch to Pre-release version之后就能用了。 其实&#xff0c;最后再switch to Release Versio…

PHP网络编程是什么:深入探索其四个方面、五个方面、六个方面与七个方面的核心奥秘

PHP网络编程是什么&#xff1a;深入探索其四个方面、五个方面、六个方面与七个方面的核心奥秘 PHP网络编程&#xff0c;这个看似简单的概念&#xff0c;实则蕴含着丰富的内涵和无尽的探索空间。它不仅是现代网络应用开发的重要基石&#xff0c;更是无数开发者实现创意与梦想的…

动静态库【Linux】

文章目录 静态库的打包动态库的打包 静态库的打包 把我们提供的方法&#xff0c;给别人用: 1、把源文件直接给别人 2、把源代码打包成库库.h 例如 &#xff1b;有a.c b.c c.c d.c ,四个.c文件 &#xff0c; 将a.c 形成a.o ,b.c形成b.o c.c形成c.o d.c形成d.o文件&#xff0c;…

JS片段:生成 UUID

Hi&#xff0c;这里是松桑&#xff0c;每天学习一个 JS 片段&#xff0c;涨涨&#x1f9c0;&#xff01;今天带来的是如何生成 UUID&#xff0c;UUID作为全局唯一标识&#xff0c;使用常见广泛&#xff0c;包括分布式系统、数据库主键、会话标识、消息队列、日志追踪等等。 什么…

【前端Vue3】——JQuery知识点总结(超详细)

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大二学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门知识专栏&#xff1a;&#x1f387;【MySQL&#…

【力扣刷题 动态规划】LeetCode 139 单词拆分、LeetCode 300 最长递增子序列 ✌

文章目录 1. 单词拆分2. 最长递增子序列 1. 单词拆分 题目链接 &#x1f34e; 解题思路&#xff1a; class Solution {bool dp[310] {false};public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<string> myset;for(auto& str :…

《欢乐钓鱼大师》新手攻略大全!新手逆袭之路!

《欢乐钓鱼大师》是一款趣味十足的模拟钓鱼游戏&#xff0c;适合各类玩家&#xff0c;从钓鱼新手到钓鱼高手都能在游戏中找到乐趣。为了帮助新手玩家更快地掌握游戏技巧&#xff0c;提高钓鱼水平&#xff0c;我们准备了一些实用的攻略和技巧&#xff0c;帮助大家轻松入门&#…

PDF 文件的解析

1、文本 PDF 的解析 1.1、文本的提取 进行文本提取的 Python 库包括&#xff1a;pdfminer.six、PyMuPDF、PyPDF2 和 pdfplumber&#xff0c;效果最好的是 PyMuPDF&#xff0c;PyMuPDF 在进行文本提取时能够最大限度地保留 PDF 的阅读顺序&#xff0c;这对于双栏 PDF 文件的抽…