图-普里姆(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

数码管动态扫描避坑指南:如何用188芯片实现50Hz无闪烁显示?

本文深入解析188数码管动态扫描技术,提供工业级无闪烁显示方案。通过优化轮询扫描机制、硬件电路设计和软件架构,实现50Hz高刷新率显示,解决亮度不均和鬼影问题,适用于医疗设备和工业控制面板等高要求场景。

hhh00的博客 975

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

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

‘’ 4899

本地部署 Anything LLM+Ollama+DeepSeek R1 大模型并实现外部访问

DeepSeek 一经发布就引起社会的广泛的关注,因为 DeepSeek 的价格低廉,性能卓越,提供了多种使用方式,满足不同用户的需求和场景。本文将详细的介绍如何在本地 Windows 上安装部署 Anything LLM + Ollama 来实现用户和 DeepSeek-r1 对话的功能以及利用路由侠内网穿透实现外网访问。

lyxnwct的博客 1896

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

从GAN生成失败案例出发:为什么你的AI画不准位置?CoordConv保姆级解决方案

本文深入探讨了GAN生成图像时位置偏移问题的根源,并提供了CoordConv的保姆级解决方案。通过分析传统CNN在空间坐标建模上的缺陷,详细介绍了CoordConv的原理、实现步骤及在StyleGAN2等模型中的实战应用,显著提升了医学图像生成等任务的定位精度。

pp12345的博客 204

中国ETF基金行情数据API接口

上交所:https://tsanghi.com/api/fin/etf/XSHG/daily?token={token}&ticker={ticker} 深交所:https://tsanghi.com/api/fin/etf/XSHE/daily?token={token}&ticker={ticker}

2401_83242712的博客 4031

普里姆算法(Prim)

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

weixin_41423494的博客 4万+

单线激光雷达的工作原理

单线激光雷达通过单一激光束的水平扫描和时间 / 相位测量,实现二维环境的距离感知,是低成本二维导航的核心传感器。尽管其无法直接提供三维信息,但其可靠性和经济性使其在消费级和工业级场景中广泛应用。随着技术发展,部分单线雷达通过振动镜或 MEMS 微振镜实现微小角度偏转,可近似模拟多线扫描效果,进一步拓展了应用边界。

谢谢大家的关注和点赞!这里只有纯纯的知识干货,没有一句废话。希望能实实在在帮到大家~要是觉得有用,别忘了给我点支持哟,你 1859

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

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

qq_51231048的博客 1万+

48、住宅抵押贷款支持证券的定价、风险评估与结构化设计

本文深入探讨了住宅抵押贷款支持证券(RMBS)的定价、风险评估与结构化设计。内容涵盖提高定价准确性的方差缩减方法,如准蒙特卡罗序列的应用;分析RMBS面临的利率风险、信用风险和模型风险,并提出相应的度量与应对策略;介绍利用动态规划优化CMO分层结构以最大化发行利润的方法。同时总结了RMBS的基本类型、定价流程及市场发展趋势,为投资者和发行人提供全面的决策支持。

quiet的专栏 154

小梅哥Xilinx FPGA学习笔记11——亚稳态

亚稳态就是D触发器输入信号在其数据窗口期内发生变化,导致D触发器的输出进入一段时间的不稳定状态,有可能发生振荡,并最终随机稳定在高电平或者低电平。

m0_51430584的博客 631

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

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

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

OCR文字识别领域经典论文总结

本篇将介绍文字识别经典论文,内容包括文字检测、文字识别、端到端识别等方法,具体将分别对论文算法简介、思路、代码等几个部分展开介绍。目前各部分只举例经典论文,算法没有全部写完,后续会将在此部分基础上更新更多论文综述及代码实战部分。.................................

专注大数据与人工智能技术分享,欢迎私信加群互相学习! 1万+

普里姆算法(Prim算法)

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

MyCyber 2万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

计算机控制技术及应用

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

普里姆(Prim)算法

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

黑胡子大叔的博客 8199

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

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

#两个西柚 9632

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

最小生成树之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、付费专栏及课程。

余额充值