Java实现普里姆算法

Java:实现惰性版本的普里姆算法(附完整源码) 阅读详情

Java实现普里姆算法

本实例的图基于邻接矩阵

图类:

package prim;




public class Graph {
	final int max=100;
	/*
	 * 顶点节点
	 */
	public class VexNode{
			int adjvex;
			int data;
	}
	
	VexNode[] vexNodes;
	int[] thevexs; //顶点集合
	int[][] edges = new int[max][max]; //边集合
	
	
	/*
	 * 创建图
	 */
	public void createGraph(Graph graph,int[][] A,int[] vexs) {
		thevexs=vexs;
		for (int i = 0; i < vexs.length; i++) {
			  for (int j = 0; j < vexs.length; j++) {
				  graph.edges[i][j] = A[i][j];
			}
		}
	}
	
	/*
	 * 输出图
	 */
	public void printGraph(Graph graph) {
		for (int i = 0; i < graph.thevexs.length; i++) {
			for (int j = 0; j < graph.thevexs.length; j++) {
				//没有路径则输出/
				if (graph.edges[i][j]==-1) {
					System.out.printf("%4s","/");
					 
				}else {
					System.out.printf("%4d",graph.edges[i][j]);
				}
				
			}
			System.out.println("\n");
		}
	}
}

Prim算法:

package prim;

public class Prim {
	final int max=100;
	int[] lowcost = new int[max];
	int[] closest = new int[max];
	int min=10;
	int k;
	int num;
	public Prim(Graph graph,int v) {
			for (int i = 0; i < graph.thevexs.length; i++) {
					lowcost[i] = graph.edges[v][i];
					closest[i] = v;
			}
			
			
			for(int i=1;i<graph.thevexs.length;i++) {
					k=-1;
					min=10;
					for(int j=0;j<graph.thevexs.length;j++) {
						if (lowcost[j]>0&&lowcost[j]<min) {
							min=lowcost[j];
							k=j;
						}
					}
					
			System.out.printf("(%d,%d),权值为:%d",closest[k],k,min);
			System.out.println("\n");
			num=num+min;
					lowcost[k] = 0;
					for (int p = 0; p < graph.thevexs.length; p++) {
							if (graph.edges[k][p]>0&&graph.edges[k][p]<lowcost[p]) {
								lowcost[p] = graph.edges[k][p];
								closest[p] = k;
							}
						
					}
	}
			System.out.println("最短路径长度为:"+num);
		
	}
	
	
}

测试:

package prim;

public class Test {

	public static void main(String[] args) {
		int[] vexs = {0,1,2,3,4};
			int[][] A = {
					{0,1,3,4,7},
					{1,0,2,-1,-1},
					{3,2,0,5,8},
					{4,-1,5,0,6},
					{7,-1,8,6,0}
			};
		Graph graph = new Graph();
		graph.createGraph(graph, A, vexs);
		graph.printGraph(graph);
		Prim prim = new Prim(graph, 0);
		
	}

}
Java:实现利用邻接矩阵实现惰性普里姆算法(附完整源码) 阅读详情

相关推荐

利用邻接矩阵实现延迟普里姆算法 Java

它的基本思想是从一个随机的顶点开始,逐渐选择与当前生成树相连的边中权重最小的边,并将该边所连接的顶点添加到生成树中,直到所有的顶点都加入生成树为止。对于一个有n个顶点的图,邻接矩阵是一个大小为n x n的二维数组,其中矩阵的每个元素m[i][j]表示顶点i和顶点j之间的边的权重。数组的所有元素为无穷大,表示所有的顶点都与生成树是不直接连接的。在每一轮迭代中,我们选择一个与当前生成树相连的顶点中,权重最小的边所连接的顶点,将其加入到生成树中,并更新。数组则用于记录每个顶点与生成树之间的最小权重边的权重值。

ByteWhiz的博客 135

Java编程:普里姆算法(已知起点求最小生成树)

Java编程:普里姆算法(求最小生成树)

KaiSarH 885

AI大模型驱动的智能座舱研发体系重构

AI大模型正重构智能座舱研发体系的核心逻辑,需以场景认知为起点、混合架构为支柱、AI原生生态为落脚点。未来,研发体系需持续融合认知科学、边缘计算与开放生态理论,推动座舱从“工具”进化为“伙伴”。

我的专栏 1917

普利姆算法(Java)

1)普利姆(Prim)算法求最小生成树,也就是在包含n个顶点的连通图中,找出只有(n - 1 )条边包含所有n个顶点的连通子图,也就是所谓的极小连通子图2)普利姆算法如下①设G = (V,E) 是连通图,T = (U,D) 是最小生成树, V、U是顶点集合,E,D是边的集合②若从顶点u开始构成最小生成树,则从集合V中取出顶点u放入集合U中,标记顶点v 的visited[u] = 1。

weixin_48544279的博客 1142

Materials Studio与LAMMPS联合作战:如何用msi2lmp.exe完美转换聚合物模型(含PCFF力场配置)

本文详细解析了如何利用msi2lmp.exe工具将Materials Studio中的聚合物模型高效、准确地转换为LAMMPS可识别的data文件,并重点配置PCFF力场。文章提供了从MS模型构建、文件导出到命令行转换、参数调整及转换后验证的全流程实战指南与避坑技巧,旨在帮助研究者解决模型转换中的常见问题,实现跨平台分子动力学模拟的无缝衔接。

weixin_29228781的博客 522

深度探索:非线性随机森林(Nonlinear Random Forest,NL-RF)原理及应用

非线性随机森林(NL-RF)旨在通过结合集成方法与高级技术来捕捉和建模数据中的非线性关系,从而改善传统随机森林在处理复杂非线性数据结构时的表现。

qq_51320133的博客 2068

算法之「普里姆(Prim)算法」

普里姆算法 普里姆算法(Prim's algorithm)是图中的一种算法,可在加权连通图中搜索最小生成树。 该算法的作用就是根据图中权值找到连接所有顶点的最短路径,也就是连接所有顶点的最小权值之和,也是这个加权图中的最小生成树。 普里姆算法步骤 1.选取权值最小边的其中一个顶点作为起始点。 2.找到离当前顶点权值最小的边,并记录该顶点为已选择。 3.重复第二步,直到找到所有顶点,就找到了图的最小...

weixin_33811961的博客 1622

别再用默认参数了!手把手教你用2P2Z补偿网络优化Buck电源的动态性能

本文详细介绍了如何通过2P2Z补偿网络优化Buck电源的动态性能,解决默认参数下的负载阶跃响应问题。从频域分析到元件选型,再到实测验证,手把手教你提升相位裕度,显著降低超调量和稳定时间,适用于DCDC和开关电源设计。

weixin_33657398的博客 258

普利姆算法(prim)求最小生成树(MST)过程详解

转:普利姆算法(prim)求最小生成树(MST)过程详解    生活中最小生成树的应用十分广泛,比如:要连通n个城市需要n-1条边线路,那么怎么样建设才能使工程造价最小呢?可以把线路的造价看成权值求这几个城市的连通图的最小生成树。求最小造价的过程也就转化成求最小生成树的过程,则最小生成树表示使其造价最小的生成树。        那么怎么样用普利姆算法(prim算法)求最小生成树(MST)? ...

u011587070的专栏 1万+

如何使用Ray和PyTorch训练模型

用户编写训练函数 → 定义单机训练逻辑。通过扩缩容配置 → 指定需要多少资源(Worker 数量、CPU/GPU)。训练器整合训练函数和配置 → 自动将训练函数分发到多个 Worker 上并行执行。Worker 运行训练函数 → 在分布式环境中完成模型训练。通过这种模式,Ray Train 实现了对分布式训练的抽象,用户只需关注单机训练逻辑,无需手动管理分布式通信和资源分配。

m0_62464865的博客 1922

SpringBoot项目整合Knife4j接口文档

写满接口信息的文档,每条接口包括:请求参数,响应参数,接口地址,接口名称,请求类型,请求格式,备注。

诨号无敌鸭的博客 1017

普里姆(Prim)算法 Java实现(最小生成树)

个人认为此算法遍历顺序的决定条件: 1.确定第一个顶点 2.下一个顶点可到(小于正无穷) 3.取可到顶点中最小权值的一个 代码中的图 最小生成树:99 代码(参考其他文章): public class MinSpanTree { /** 邻接矩阵*/ int[][] matrix; /** 表示正无穷*/ int MAX

CmdSmith的博客 3092

Parasoft C++Test软件集成测试(部件测试)_实例讲解

本文以一组功能函数组件作为示例,讲解了如何使用C++Test进行软件集成测试。本文的示例比较简单,但是思路、方法和流程都是通用的,希望对大家有所帮助。

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 736

普里姆算法之JAVA实现

普里姆算法是用来求加权连通图中的最小(代价)生成树的算法。 普里姆算法的基本思想是:从图中任意取出一个顶点,把它当成一棵树,然后从与这棵树相接的边中选取一条权值最小的边,并将这条边及其所连接的顶点一同并入这棵树中,重复以上操作,直到所有的顶点都被并入到这棵树中为止。 容易看到,这里有一个递归重复进行的过程,所以可以采用递归的思想来完成该算法。 首先,需要构造一个图结构,本文以如下图为图结构 ...

阿珂学编程 1513

Linux 4.19、Linux 5.10、Linux 6.1 三个版本详细分析

Linux 4.19发布日期:2018年10月22日LTS 状态:是长期支持版本,官方支持到2024年12月。Linux 5.10发布日期:2020年12月13日LTS 状态:LTS 版本,官方支持到2026年12月。Linux 6.1发布日期:2022年12月11日LTS 状态:不是官方的LTS版本,但通常社区会为新的版本提供一定时间的支持。定位:稳定性和长期支持,广泛应用于多种平台,尤其是嵌入式系统和服务器。主要优势:稳定性高,广泛的硬件支持,核心功能可靠。

小灰灰的博客 5958

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Prim 普里姆算法的java实现

<br />  普里姆算法,主要是用于求最小生成树的典型算法,其实现简单。<br />  package algorithm; import java.util.Scanner; public class Prim { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { int n = sc.nextInt();

2799

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Java实现图的普里姆算法

import java.util.LinkedList; /** 图的数据结构 @author lyc */ public class Graph implements GraphIt{ // v图的定点数 private String[] vertices; // matrix邻接矩阵 private int[][] matrix; // 边的数目 private int numOfEdges; // 点的访问标记 private boolean[] flag; // 最小生成树的 pri

qq_30535029的博客 173

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

java实现普里姆算法

一、应用场景-修路问题 看一个应用场景和问题: 有胜利乡有7个村庄(A,B,C,D,E,F,G),现在需要修路把7个村庄连通 各个村庄的距离用边线表示(权) ,比如 A – B 距离 5 公里 问:如何修路保证各个村庄都能连通,并且总的修建公路总里程最短? 思路: 将 10 条边,连接即可,但是总的里程数不是最小. 正确的思路,就是尽可能的选择少的路线,并且每条路线最小,保证总里程数最少. ...

闵浮龙的博客 1371

最小生成树-普里姆算法-java实现

最小生成树:是将图中的顶点全部连通,但是其权值之和要求最小 /** * 最小生成树:两种方式,普里姆算法和克鲁斯卡尔算法 * @author timmy1 * */public class MinSpanTree { int[][] matrix;// 矩阵 int MAX_WEIGHT = Integer.MAX_VALUE; int size;// 顶点个数 /** * 普里姆算

Timmy_zzh的博客 3276

普里姆算法Java实现非递归

之前以为就是一个点不断的找最小的没有访问过的点 后来仔细看看要求 从任意一个点出发 最后的权值要一样 无非就是加一个集合存访问过的点用来遍历里面找最小的那一个 import java.util.ArrayList; import java.util.List; public class Test { public static void main(String[]ar){ ...

YangjulongTrue的博客 258

用Java实现的最小生成树的普里姆算法

import java.util.Stack; public class MinimumSpanningTree { private MGraph mgraph = new MGraph(); public MinimumSpanningTree() { } public void createMST() { Closedge[] closedge = new Closedge

gong71的专栏 3396

Java、C语言普里姆算法最小生成树

目录 1.生成树的概念 2.普里姆算法最小生成树(Prim) 3.源代码示例 3.1 Java实现 3.2C语言实现 1.生成树的概念 (1)子图包含原图全部节点,子图为连通图 (2)在(1)的前提下使子图尽可能的少包含原图中的边 满足以上两点的子图称为原图的生成树。生成树必定包含且仅包含原图的 n - 1 条边 最小生成树:在图的所有生成树中,n - 1 条边上权值和最小...

记录学习点滴 3664
上一篇: Java实现无向无权图的邻接矩阵的存储
下一篇: Java基于无向有权图实现克鲁斯卡尔算法
Coder_py
博客等级 码龄10年 106粉丝 258原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值