图-普里姆(Prim)算法记录

Prim算法求最小生成树 Prim算法求最小生成树 问题如下: 算法实现 #include<stdio.h> #include<math.h> #include<stdlib.h> //使用prim算法求最小生成树 #define Max 100 #define INFINITE 9999999 float graph[Max][Max];//邻接矩阵,INFINITE说明不相邻... 阅读详情

普里姆(Prim)算法记录

参考资料:《大话数据结构》
prim算法是在无向有权连通图中找到最小生成树;
先把自己用excel做的流程和访问结果截图给出来,然后语言描述,然后再贴《大话数据结构》书中代码!
这里写图片描述
原图:
拓扑图
访问结果:
结果
两个数组:

int adjvx[9];   //保存的是能到lowcost数组中最短权值结点的结点下标
int lowcost[9]; //adjvx数组中各个结点到“能到达”结点的最短路径,值为0表示已经访问

开始流程(将v0作为第一个访问结点示例)

第一轮:
a)访问v0,将lowcost[0]=0;【标识v0已经访问过了】
b)查找与v0相连的结点,将对应相连的权值写到lowcost[]数组(不可达我用的是【~】标识),将能到此节点的结点下标写到adjvex[]数组,例如:到v1的结点路径长度为10,所以lowcost[1]=10;adjvex[1]=0【表示v1可以通过v0到达】;到v5的结点也是如此!

第二轮:
a)在上一轮的lowcost数组中,查找以一个最小值,访问该值对应的结点;
例如:上一轮lowcost数组中最小值是10,对应下标为v1,访问v1;将lowcost[1]=0;【标识v1已经访问过了】
b)查找与v1相连的结点,将对应相连的权值写到lowcost[]数组,将能到此节点【也就是v1】的结点下标写到adjvex[]数组;
例如:v1能到v2,权值为18,所以lowcost[2]=18;adjvex[2]=1;v1到v6,v1到v8也是类似;

第三轮:
a)在上一轮的lowcost数组中,查找以一个最小值,访问该值对应的结点;
例如:上一轮lowcost数组中最小值是11,对应下标为v5,访问v5;将lowcost[5]=0;【标识v5已经访问过了】
b)查找与v5相连的结点,将对应相连的权值写到lowcost[]数组,将能到此节点【也就是v5】的结点下标写到adjvex[]数组;
注意:v5能到v6,权值为17,与v1到v6权值为16相比,前者要大,所以保留v1到v6的记录,不把v5到v6的数据写进lowcost数组和adjvex数组;其实在每一轮做这一步的时候,都要比较此次访问的结点到相连结点,在此之前的访问过程中,是否有更短的权值路径,有的话,则保留原记录!
v5能到v4,将此记录写到lowcost数组和adjvex数组!

第四轮:
a)在上一轮的lowcost数组中,查找以一个最小值,访问该值对应的结点;
例如:上一轮lowcost数组中最小值是12,对应下标为v8,访问v8;将lowcost[8]=0;【标识v8已经访问过了】
b)查找与v8相连的结点,将对应相连的权值写到lowcost[]数组,将能到此节点【也就是v8】的结点下标写到adjvex[]数组;
例如:v8到v2,v8到v3;
。。。。。。
后面的就可以自己模拟了

源码:

void MiniSpanTree_Prim(MGraph G)
{
    int min, i, j, k;
    int adjvex[MAXVEX];
    int lowcost[MAXVEX];
    lowcost[0] = 0;
    adjvex[0] = 0;
    for(i = 1; i<G.numVertexes;i++)
    {
        lowcost[i] = G.arc[0][i];
        adjvex[i] = 0;
    }
    for(i = 1; i<G.numVertexes;i++)
    {
        min = INFINITY;
        j = 1; 
        k = 1;
        while(j<G.numVertexes)
        {
            if(lowcost[j]!=0 && lowcost[j]<min)
            {
                min = lowcost[j];
                k = j;
            }
            j++;
        }
        printf("(%d,%d)",adjvex[k],k);
        lowcost[k] = 0;
        for(j = 1; j<G.numVertexes; j++)
        {
            if(lowcost[j]!=0 && G.arc[k][j]<lowcost[j])
            {
                lowcost[j] = G.arc[k][j];
                adjvex[j] = k;
            }
        }
    }
}
Prim 算法模版 例题CF 1245D 复杂度O(n2)O(n^2)O(n2) , n为节点数 int k[maxn]; int c[maxn]; int x[maxn],y[maxn]; int dt[maxn]; //dt[i]表示节点i到起点的距离 int n; bool vis[maxn]; int fm[maxn]; ll ct(int i,int j){ return 1LL*(k[i]+k[j])*(abs(x[i]-x[j])+abs(y[i]-y[j])); } void Prim(int s){ 阅读详情

相关推荐

prim算法(普里姆算法)详解

prim算法(普里姆算法)详解 了解了什么是最小生成树后,本节为您讲解如何用普里姆(prim)算法查找连通网(带权的连通图)中的最小生成树。 普里姆算法查找最小生成树的过程,采用了贪心算法的思想。对于包含 N 个顶点的连通网,普里姆算法每次从连通网中找出一个权值最小的边,这样的操作重复 N-1 次,由 N-1 条权值最小的边组成的生成树就是最小生成树。 那么,如何找出 N-1 条权值最小的边呢?普里姆算法的实现思路是: 将连通网中的所有顶点分为两类(假设为 A 类和 B 类)。初始状态下,所有顶点位于 B

ccc369639963的博客 3万+

最小生成树——Prim算法(详细图解)

最小生成树的概念 在一给定的无向图G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边,而 w(u, v) 代表此的边权重,若存在 T 为 E 的子集(即)且为无循环图,使得的 w(T) 最小,则此 T 为 G 的最小生成树。最小生成树其实是最小权重生成树的简称。 ...

qq_62213124的博客 22万+

大话数据结构-普里姆算法(Prim)和克鲁斯卡尔算法(Kruskal)

最小生成树的定义,普里姆算法(Prim)和克鲁斯卡尔(Kruskal),以及各种存储结构下的最小生成树的代码实现。

村长Korbin 8256

最小生成树Prim算法C语言-图解

最小生成树Prim算法算法简介图解 算法简介 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点,且其所有边的权值之和亦为最小。 图解 https://baike.baidu.com/item/Prim/10242166?fromtitle=Prim%E7%AE%97%E6%B3%95&fromid=10986864&fr=aladdin ...

Lazy_Goat的博客 5143

Prim算法(普里姆算法)

O()。由此可以断定,普里姆算法的运行效率只与连通网中包含的顶点数有关,而和连通网含有的边数无关。在边稠密的连通网中查找最小生成树,可以优先考虑 Prim 普里姆算法。如果连通网中所含边的绸密度不高,则建议使用克鲁斯卡尔算法。当前阅读的是整套数据结构和算法教程中的一节内容,想系统学习数据结构和算法的读者,可以前往教程目录页面系统的学习,加我 q(834937624)获取教程的完整 PDF 电子版。

数据结构和算法教程(C语言版) 1326

从入门到实战:rkhunter(Rootkit猎手)在Linux服务器安全运维中的部署与自动化监控

本文详细介绍了rkhunter(Rootkit猎手)在Linux服务器安全运维中的部署与自动化监控方法。从Rootkit的危害性入手,讲解了rkhunter的安装、配置及实战应用,包括如何建立基准、优化定时任务方案以及智能告警处理。通过多级过滤脚本和系统级联动,帮助运维人员高效识别和应对Rootkit威胁,提升服务器安全性。

weixin_28715953的博客 239

数据结构与算法 —— 最小生成树Prim算法和Kruskal算法详细图解以及python实现

上一章我们整理了最短路径中的Dijkstra算法。现在我们整理最小生成树中Prim算法(普里姆算法)和Kruskal算法(克鲁斯卡尔算法)。最小生成树也是图论中常见问题,其指的是在一个图中找到一个连通子图,使得所有节点都能够互相到达,且总权值最小。最小生成树的例子在生活中也很常见,比如城市的公交线路系统需要规划如何走完一趟路径和是最短的,或者快递公司如何给不同住址的客户送货才能是最短的路径。2. Prim算法(普里姆算法)2.1 Prim算法历史。

‘’ 4899

用友u8服务器优化,用友U8erp软件运行的性能优化方案图文教程

今天一定要给大家分享一下用友U8erp软件运行的性能优化方案图文教程,以下方案来自用友软件官方维护工程师反馈在在处理客户问题的时候,有一类问题较为挠头,就是诸如用友U8服务器效率低下的问题。比如用友U8运行慢,卡住等,我们暂先不提用友U8软件代码、脚本层面本身的性能提升问题,我们只是基于现有用友U8软件版本,在客户现有环境下排查用友U8软件运行的性能瓶颈,并采取一定的技术手段进行性能调校。本文将推...

weixin_39882870的博客 5306

prim算法java语言实现

package com.test.prim; import java.util.ArrayList; public class PrimMiniSpanTree { /** * @param args */ protected final static int Max = 1000; ArrayList al = new ArrayList(); publi

hfj8220的专栏 766

AI安全攻防:十六进制编码与表情符号如何绕过ChatGPT安全限制

在人工智能安全领域,提示词工程是影响大语言模型行为的关键技术。其核心原理在于通过精心设计的输入文本,引导模型生成特定内容或执行特定任务。这项技术的价值在于能够深入探究模型的理解机制与决策边界,对于模型优化、安全测试及功能开发具有重要意义。在实际应用场景中,研究人员常利用编码转换、符号插入等方法构造输入,以测试模型安全护栏的鲁棒性。近期,一种结合十六进制编码与表情符号的组合攻击手法受到关注,该方法通过信息伪装与语义干扰,试图绕过模型内置的内容过滤机制,这凸显了当前AI安全在输入预处理与语义理解协同防御上面临的

weixin_30633405的博客 449

【电路设计实战】BUCK降压电路:从原理到PCB布局的降噪与效率优化

本文深入剖析了BUCK降压电路的工作原理,并针对其固有的开关噪声问题,提供了从核心元件选型到PCB布局的全面优化方案。文章重点探讨了电感、电容等关键元件的选型要点,强调了低ESR电容和肖特基二极管的重要性,并详细阐述了如何通过最小化功率回路、保护敏感信号线等PCB布局实战技巧,有效抑制噪声、提升效率与稳定性。

weixin_29304021的博客 221

普里姆算法(Prim)

普里姆算法是归并顶点的算法,与边数无关,所以适用于稠密图。 构造最小生成树一定有下面两个特点: 1、尽量选取最小的权值的边,并且不能有回路 2、n个顶点只选取n-1条边。 普里姆算法是由最小生成树(简称为:MST)的一条性质引出来的: 假设N=(V,E)是一个连通图,U是顶点集V的一个非空子集。若(u,v)是一条具有组小权值的边,其中u∈U,v∈ V-U,...

weixin_41423494的博客 4万+

(最新更新!)2024全国大学生数学建模竞赛(国赛)B题决策优化+鲁棒模型完整建模全解全析

2024全国大学生数学建模竞赛(国赛)B题完整建模全解全析(已更新!)

Yilu264的博客 9417

数据结构——普里姆(Prim)算法

普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点,且其所有边的权值之和亦为最小。以下是数据结构中关于普里姆算法的操作(编程风格参考严蔚敏版数据结构)。

qq_51231048的博客 1万+

SAP_SD模块深度解析SAP信用检查中的“未清数量”取值逻辑

确认数量 vs 订单数量:如果系统配置了可用性检查(ATP),并且订单只确认了部分数量,信用检查通常只占用已确认数量的额度(具体取决于信用组的配置)。在SAP中,未清订单数量的计算并非简单读取订单行项目的目标数量(VBAK-KWMENG),而是基于**计划行(Schedule Lines)**层级来汇总的。状态的转换点:当交货单创建(VL01N)并保存时,这部分数量对应订单的“未清订单数量”减少,“未清交货数量”增加。业务人员眼中的未清数量很简单:“我卖了100个,发了30个,未清就是70个”。

我小时候很黑的博客 313

CODESYS数据处理合集(高低字节/ 字/浮点数/位)

VAR_INPUT//字节0//字节1END_VARVAREND_VAR。

RXXW_Dor的博客 354

最小生成树(普里姆算法【Prim】与克鲁斯卡尔算法【Kruskal】)

写在前面:博主是一位普普通通的19届二本大学生,平时最大的爱好就是听听歌,逛逛B站。博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事,做自己以后不会留有遗憾的事,做自己觉得有意义的事,不浪费这大好的青春年华。博主写博客目的是记录所学到的知识并方便自己复习,在记录知识的同时获得部分浏览量,得到更多人的认可,满足小小的成就感,同时在写博客的途中结交更多志同道合的朋友,让自己在技术的路上并不孤单。 目录: 1. 2. 3.  &n.

记录博主学到的点滴 1万+

科研绘图系列:基因突变瀑布图统计以及可视化

科研绘图系列:基因突变瀑布图统计以及可视化

专注生信领域 1653

普里姆算法(Prim算法)

普里姆算法(Prim算法) 简介   普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。该算法于1930年由捷克数学家沃伊捷赫·亚尔尼克(英语:Vojtěch Jarník)发现;并在1957年由美国计算机科学家...

MyCyber 2万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

普里姆(Prim)算法

普里姆(Prim)算法 普里姆(Prim)算法思想 普里姆(Prim)算法是一某个顶点为起点,逐步找各顶点最小权值的边来构建最小生成树。 换一种说法: 从任意一顶点 v0 开始选择其最近顶点 v1 构成树 T1,再连接与 T1 最近顶点 v2 构成树 T2, 如此重复直到所有顶点均在所构成树中为止。 举例 下面一张无向网图 我们以V0为根结点,找到与V0相邻的结点中权值最小的V6 再从当前树中...

黑胡子大叔的博客 8199

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

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

#两个西柚 9632

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

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

Prim算法是解决最小生成树的经典算法之一。本博客以个人的理解简略地对Prim算法进行介绍以及解剖。

Yi_xiaoqiang的博客 4万+

图的最小生成树算法

数据结构--图的最小生成树算法

qq_45917176的博客 1万+

数据结构 最小生成树 prim算法(普里姆算法)C语言实现

我们可以将定义理解为:将图的所有顶点分为两类,A类(保存已经查找过的顶点),B类(保存未查找过的顶点),从任一顶点开始,并将其从B类移至A类,然后开始寻找B类中(的顶点)到A类顶点之间权值最小的顶点,将其从B类中移至A类,重复上述操作,直至B类中没有顶点。所走过的顶点和边就是该连通图的最小生成树。

m0_62341092的博客 1万+

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

1、相关概念 1)生成树一个连通图的生成树是它的极小连通子图,在n个顶点的情形下,有n-1条边。生成树是对连通图而言的,是连同图的极小连通子图,包含图中的所有顶点,有且仅有n-1条边。非连通图的生成树则组成一个生成森林;若图中有n个顶点,m个连通分量,则生成森林中有n-m条边。 2)和树的遍历相似,若从图中某顶点出发访遍图中每个顶点,且每个顶点仅访问一次,此过程称为图的遍历,(Tra...

hopegrace的博客 1万+

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

普里姆算法: 普里姆算法在找最小生成树时,将顶点分为两类,一类是在查找的过程中已经包含在树中的(假设为 A 类),剩下的是另一类(假设为 B 类)。 对于给定的连通网,起始状态全部顶点都归为 B 类。在找最小生成树时,选定任意一个顶点作为起始点,并将之从 B 类移至 A 类;然后找出 B 类中到 A 类中的顶点之间权值最小的顶点,将之从 B 类移至 A 类,如此重复,直到 B 类中没有顶点为止。所...

不积极分子 7856
上一篇: 云计算-搭建Hadoop伪分布式环境
下一篇: Ubuntu和Mac下搭建python虚拟环境virtualenv
StevenAC
博客等级 码龄10年 16粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值