用普里姆算法求最小生成树

《C语言小游戏之贪吃蛇程序代码》 //为广大编程游戏爱好者提供一个参考的游戏源代码#include<stdio.h>#include<conio.h>#include<windows.h>#include<time.h>#define framex 5#define framey 5#define wide 20#define high 20int i,j,a[2];//将光标移动到... 阅读详情
/*用普里姆算法求最小生成树*/
#include <iostream>
using namespace std;
/*邻接矩阵的类型定义*/
#define MAX 10000000
#define MAX_VERTEX_NUM 20
typedef struct
{
	char vexs[MAX_VERTEX_NUM];//用一维数组存储顶点信息
	int edges[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//用二维数组充当矩阵,来存储顶点边的信息
	int vexnum,edgenum;//顶点树和边数
}MGraph;
/*构造无向联通网的邻接矩阵*/
void CreateUDG_AM(MGraph &G,int n,int e)
{
	G.vexnum=n;
	G.edgenum=e;
	
	int i,j,k;
	for(i=0;i<n;i++)
		cin>>G.vexs[i];//输入顶点信息
	for(i=0;i<n;i++)
		for(j=0;j<n;j++)
			G.edges[i][j]=MAX;//将矩阵初始化为无穷大
	for(k=0;k<e;k++)
	{
		cin>>i>>j;
		cin>>G.edges[i][j];//这里只用输入对称的边就行,也就是输入下矩阵或是上矩阵
		G.edges[j][i]=G.edges[i][j];
	}
}
//辅助数组定义
typedef struct 
{
	char adjvex;
	int lowcost;
}CostOfVU;
CostOfVU closedge[MAX_VERTEX_NUM];//该一维数组用来存储V-U和U之间的权值
int LocateVex(MGraph &G,char x)
{//确定顶点在一维数组中的位置
	int i=0;
	while(G.vexs[i]!=x && i<G.vexnum)
		i++;
	return i;
}
int MinEdge(CostOfVU *p,MGraph &G)
{//求U和V-U之间最小的权值,在V-U中的顶点的位置
	int i;
	int k=0;
	for(i=0;i<G.vexnum;i++)
	{
		while(p[k].lowcost==0)
			k++;//找到权值不为0的顶点
		while((p[i].lowcost==0||i==k)&&i<G.vexnum)
			i++;//找到k后第一个不为0的顶点
		if((p[k].lowcost>p[i].lowcost)&&i<G.vexnum)
			k=i;//比较权值
	}
	return k;
}
//调用上面的函数求最小生成树
void MiniSpanTree_Prim(MGraph &G,char u)
{
	int i,j,k;
	k=LocateVex(G,u);//确定u在连通图中的位置
	for(i=0;i<G.vexnum;i++)
	{//将V-U中的顶点到U中的顶点的权值都存储到closedge数组中
		closedge[i].adjvex=G.vexs[k];
		closedge[i].lowcost=G.edges[k][i];
	}
	closedge[k].lowcost=0;//该句表示将顶点u纳入到U中
	for(i=1;i<G.vexnum;i++)
	{
		k=MinEdge(closedge,G);//寻找closedge数组中权值最小的顶点,并返回其位置。
		cout<<closedge[k].adjvex<<"-"<<G.vexs[k]<<":"<<closedge[k].lowcost<<endl;//输出找到的边和权值
		closedge[k].lowcost=0;//将第k个顶点并入U集中
		for(j=0;j<G.vexnum;j++)
		{//更新V-U到U之间的权值
			if(G.edges[k][j]<closedge[j].lowcost)
			{
				closedge[j].adjvex=G.vexs[k];
				closedge[j].lowcost=G.edges[k][j];
			}
		}
	}
}
void main()
{
	freopen("a.txt","r",stdin);
	//freopen("b.txt","w",stdout);
	MGraph G;
	CreateUDG_AM(G,6,9);
	MiniSpanTree_Prim(G,'0');
}

 

2026年中科曙光嵌入式笔试试卷带答案 2026年中科曙光嵌入式笔试试卷涵盖数字电路、总线协议、时序分析、存储原理及硬件寄存器操作等核心知识点。单选题聚焦SPI/I2C差异、建立/保持时间、ADC作用等基础概念;多选题考察时序约束、非易失存储、BMC功能等综合应用;判断题强化对关键术语的理解;填空题考查基本术语记忆;简答题要求掌握SPI与I2C对比、时序违例后果及BMC管理机制。试题紧扣嵌入式系统开发实际,突出接口协议、时序设计与硬件交互能力,是嵌入式岗位选拔的重要依据。 阅读详情

相关推荐

RK3568部署YOLOv8的7种方法对比:量化vs非量化的性能实测与优化建议

本文针对RK3568平台,深度对比了YOLOv8模型的七种部署方法,重点分析了量化与非量化策略的性能差异。通过实测数据,详细评估了不同方法在推理速度、CPU占用、内存消耗及模型精度上的表现,并提供了从模型结构调整到系统级优化的具体建议,为边缘AI部署选型提供实用参考。

weixin_29099217的博客 527

普里姆(prim)算法--求最小生成树

教学地址: 普里姆算法 代码实现: #include <bits/stdc++.h> using namespace std; const int maxn=110; int n,M[maxn][maxn]; int vis[maxn]; int d[maxn],p[maxn]; int minv,u; int prim() { for(int i=1;i<=n;i++) { vis[i]=0; d[i]=0x7f7f7f7f; p[i

weixin_46503238的博客 552

手把手教你玩转AT32F403A位带操作:像51单片机一样控制GPIO

本文详细介绍了如何在雅特力AT32F403A国产MCU上实现位带操作,像51单片机一样高效控制GPIO。通过实战演示和性能对比,展示了位带操作在实时控制中的优势,包括更快的执行速度和更低的延迟,特别适合工业控制和电机驱动等场景。

weixin_29234509的博客 285

最小生成树(详解普里姆算法)

C++详解用普里姆算法实现最小生成树

CXR_XC的博客 9626

实战演练 | ABAQUS显式动力学分析在金属切削仿真中的应用

本文详细介绍了如何利用ABAQUS显式动力学分析进行金属切削过程的二维仿真。通过从零开始的完整流程,包括几何建模、材料本构与失效定义、网格划分、接触设置、边界条件施加,到结果后处理与切削力提取,为工程师和研究人员提供了实用的仿真方法,以优化刀具设计和加工工艺。

purple的博客 930

给宇树Go2机器人装‘眼睛’:在Jetson Orin Nano上从零部署YOLOv5的保姆级避坑实录

本文详细介绍了在Jetson Orin Nano上为宇树Go2机器人部署YOLOv5视觉系统的完整流程,涵盖硬件选型、环境配置、模型优化及系统集成等关键步骤。针对机器人应用场景特有的离线部署、版本冲突和实时推理等挑战,提供了实用的解决方案和性能优化技巧,帮助开发者快速实现机器人的视觉能力升级。

weixin_29169505的博客 378

图算法设计之用普里姆Prim算法构造最小生成树

用普里姆Prim构造最小生成树 一、最小生成树的概念 一个连通图的生成树是一个极小的连通子图,它含有图中的全部顶点,但只有构成一棵树的n-1条边。 对于一个带权(假定每条边上的权均大于0的数)连通无向图G中的不同生成树,其每棵树的所有边上的权值之和也可能不同。 图的所有生成树中具有边上的权值之和的树称为图的最小生成树。 ps:以上是官方说法,我们用简单易懂的语言来理解最小生成树 最小生成树: ①是一棵树(没有回路,有n个顶点,有n-1条边) ②是生成树(包含全部顶点,n-1条边都在图中) ③边的权重和最小

#两个西柚 9632

普里姆Prim— 最小生成树

#include// 用prim算法构造五项连通图网的最小生成树 #define maxcost 1000 int gm[50][50]; void prim(int tree[],int cost[],int n) {//从序号为0的顶点出发,建立连通网的最小生成树,二

543

在 dell precision 7920 tower CentOS 8 Stream 上安裝nvidia驱动程序、Anaconda

简单记录一下如何在实验室dell precision 7920 tower CentOS 8 Stream上安装nvidia显卡驱动。

chen9046的博客 995

SAP-ABAP:SAP MM采购订单增强核心BAdI:IF_EX_ME_PROCESS_PO_CUST 深度解析与最佳实践指南

SAP MM采购订单增强核心BAdI:IF_EX_ME_PROCESS_PO_CUST 关键摘要 核心要点 技术定位:SAP MM模块采购订单处理的核心增强框架,属于第二代BAdI技术,支持多实例并行实现 架构特点: 覆盖采购订单全生命周期(创建/修改/显示) 嵌入ME21N/ME22N/ME23N的标准处理流程 提供字段级、抬头、行项目、账户分配等多层次增强点 关键方法: INITIALIZE:事务初始化时预加载数据 PROCESS_HEADER:处理抬头数据变更 PROCESS_ITEM:处理行项目字段

baidu_35680696的博客 811

【算法】最小生成树——普利姆 (Prim) 算法

本文介绍了普利姆 (Prim) 算法的相关知识。

代码星辰的博客 6936

学Simulink——基于Simulink的Buck-Boost变换器双闭环PI+抗饱和设计建模示例

本文详细介绍了基于Simulink的非反相Buck-Boost变换器双闭环控制设计方法。针对Buck-Boost变换器特有的右半平面零点(RHPZ)和控制挑战,提出了电压-电流双闭环PI控制架构,并集成抗积分饱和机制。通过Simulink建模,实现了主电路、电流内环PI、电压外环PI、PWM及占空比限幅等模块的搭建,验证了在输入电压跌落(20V→10V)和负载突变(2A→4A)等场景下的稳定性能。仿真结果表明,输出电压波动小于0.35V,恢复时间快于1ms,电感电流有效限幅。文章还讨论了工程实践要点和扩展方

xiaoheshang_123的博客 318

prim算法_普里姆算法(Prim算法)求最小生成树

通过前面的学习,对于含有 n 个顶点的连通图来说可能包含有多种生成树,例如图 1 所示:图 1 连通图的生成树图 1 中的连通图和它相对应的生成树,可以用于解决实际生活中的问题:假设A、B、C 和 D 为 4 座城市,为了方便生产生活,要为这 4 座城市建立通信。对于 4 个城市来讲,本着节约经费的原则,只需要建立 3 个通信线路即可,就如图 1(b)中的任意一种方式。在具体选择采用(b...

weixin_39945816的博客 1343

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

采用普里姆算法求最小生成树

目的:领会普里姆算法求带权连通图中最小生成树的过程和相关算法设计。 内容:编写一个程序exp8-5.cpp,实现求带权连通图最小生成树的普里姆算法。对于如图8.55所示的带权连通图G,输出从顶点0出发的一颗最小生成树。 [  数据结构教程(第5版)李春葆 主编   ]  第8章上机练习实验题5 代码如下: #include &lt;iostream&gt; #include &lt;cs...

君兮月影的博客 1万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

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

普利姆(Prim)算法求最小生成树,也就是在包含n个顶点的连通图中,找出只有(n-1)条边包含所有n个顶点的连通子图,也就是所谓的极小连通子图。若集合U中顶点ui与集合V-U中的顶点vj之间存在边,则寻找这些边中权值最小的边,但不能构成回路,将顶点vj加入集合。i++) { // i结点表示被访问过的结点。若从顶点u开始构造最小生成树,则从集合V中取出顶点u放入集合U中,标记顶点v的visited[u]=1。设G=(V,E)是连通网,T=(U,D)是最小生成树,V,U是顶点集合,E,D是边的集合。

2301_80488270的博客 494

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

如果求一个连通图中以某个顶点为根_普里姆算法(Prim算法)求最小生成树

通过前面的学习,对于含有 n 个顶点的连通图来说可能包含有多种生成树,例如图 1 所示:图 1 连通图的生成树图 1 中的连通图和它相对应的生成树,可以用于解决实际生活中的问题:假设A、B、C 和 D 为 4 座城市,为了方便生产生活,要为这 4 座城市建立通信。对于 4 个城市来讲,本着节约经费的原则,只需要建立 3 个通信线路即可,就如图 1(b)中的任意一种方式。在具体选择采用(b...

weixin_33765530的博客 1987

普里姆算法求最小生成树

前提创建一个二维的邻接矩阵。算法的大概内容,首先创建两个数组,一个数组lowest初始化存储二维矩阵的第一行,另一个数组adjvex的数组初始化为0,第一个a[0]为零代表第一个顶点纳入生成树。 通过循环比较,查找到lowest中最小的值,对应的位置index的顶点就是即将纳入生成数的顶点 然后将index顶点对应的行和lowest进行比较,将每列的最小值保存到lowest的对应位置,此时,l...

欣淡定的博客 3988

有点混乱的普里姆算法求最小生成树

【代码】有点混乱的普里姆算法求最小生成树。

m0_59917959的博客 317

求最小生成树_普里姆算法(Prim)

package com.test; import java.util.Arrays; // 求最小生成树----普里姆算法(Prim) public class MiniSpanTreePrim { public static void main(String[] args) { // 构造最小生成树 int vertexNumber = 9;// 定点数 int arr[][]

那些疯狂到以为自己能够改变世界的人,才能真正改变世界! 1686

普里姆算法(Prim算法求最小生成树)

普里姆算法的基本思想:普里姆算法是一种构造最小生成树的算法,它是按逐个将顶点连通的方式来构造最小生成树的。时间复杂度为O(n^2)。 从连通网络N = { V, E }中的某一顶点u0出发,选择与它关联的具有最小权值的边(u0, v),将其顶点加入到生成树的顶点集合U中。以后每一步从一个顶点在U中,而另一个顶点不在U中的各条边中选择权值最小的边(u, v),把该边加入到生成树的边集TE中,把它的顶

Creame-Cake的专栏 6964

(七)1.1_普里姆算法求无向连通网的最小生成树

注意:本算法使用的是邻接表来存储图 一.普里姆算法   以一个起点为连通分量(这里以v1为起点),从其他未连接至该连通分量的顶点中找出一个顶点,该顶点连接该连通分量的最短边是所有未连接到该连通分量中的边中最短的,然后连接该顶点,然后继续从其他未连接至该连通分量的顶点中找出一个顶点,重复上述步骤…直到所有顶点都被连接 二.思路分析   1.我们要构建一个辅助数组closeedge[MAX_VER...

鸣鼓ming的博客 1364

求最小生成树——普里姆算法

#include <stdio.h> #include <malloc.h> //图的两种存储结构 #define INF 32767 //定义∞ #define MAXV 100 //最大顶点个数 typedef char InfoType; //以下定义邻接矩阵类型 typedef struct { int no; //顶点编号 InfoTy...

铩羽 540

普里姆算法求最小生成树(简易算法版)

普里姆算法求最小生成树与之前发的迪杰斯特拉算法求最小生成树的思想类似,都是用到一个dis数组,不过与迪杰斯特拉算法不同的是,之前迪杰斯特拉算法求最短路里dis存储的是源点到各点的最短路,每次循环找离源点最近的点,确认后加入到已知最短路的集合中,并标记。然后根据这个最近的点松弛离源点最近的点的距离,而这里对dis进行松弛的时候,只需要判断 与找到的最近点相连的点的距离<初始源点到这个点的直接距离然后松弛就行,其余的跟迪杰斯特拉算法几乎一样。我们会注意到这里为什么不用像迪杰斯特拉算法一样加上之前的距离进行

q1430186623的博客 1143

prim算法(普里姆算法)求最小生成树

最小生成树 参考《算法第四版》-Robert Sedgewick , Kevin Wayne 一幅加权图的最小生成树(MST)是它的一棵权值(树中所有边的权值之和)最小的生成树。 1.重要性质: (1)用一条边连接树中的任意两个顶点都会产生一个新的环; (2)从树中删去一条边将会得到两棵独立的树。 这两条性质是证明最小生成树的另一条基本性质的基础,而由这条基本性质就能够得到本节中的最小生成树算法。 最小生成树的边数=顶点数-1 切分定理 定义:图的一种切分是将图的所有顶点分为两个非空且..

suzhou7915的博客 5466
上一篇: 用克鲁斯尔算法求最小生成树
下一篇: 拓扑排序 C++代码实现
hackerain
博客等级 码龄16年 753粉丝 220原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值