最小生成树-Prim

最小生成树之prim算法 最小生成树的Prim算法也是贪心算法的一大经典应用。Prim算法的特点是时刻维护一棵树,算法不断加边,加的过程始终是一棵树。   Prim算法过程: 一条边一条边地加, 维护一棵树。 初始 E = {}空集合, V = {任意节点} 循环(n – 1)次,每次选择一条边(v1,v2), 满足:v1属于V , v2不属于V。且(v1,v2)权值最小。 E = E + (v1,v2) V = V... 阅读详情

prim算法

不断从不在树上的节点中选择代价最小的一个加入树上,与dijkstra算法非常类似。

1.初始化.所有节点visit[i]=0,距离dist[i]=MAX,把根root的dist[]置0确保第一次加入树。

2.每次选最小代价的节点加入,共选n次

2.1遍历dist[i]选择未被访问且代价最小的节点u

2.2遍历u的未被访问的邻接点更新dist[i]数组

int Prim(int root,int NV)
{
    int ret=0,u=root;
    for(int i=1;i<=NV;i++)
    {
        dist[i]=MAX;
        visit[i]=0;
        path[i]=i;
    }
    dist[u]=0;
    for(int i=1;i<=NV;i++)
    {
        int min_value=MAX;
        for(int j=1;j<=NV;j++)
        {
            if(visit[j]==0&&dist[j]<min_value)
            {
                min_value=dist[j];
                u=j;
            }
        }
        if(min_value==MAX)return -1;
        visit[u]=1;
        ret+=dist[u];
        for(int j=1;j<=NV;j++)
        {
            if(visit[j]==0&&Metrix[u][j]<dist[j])
            {
                dist[j]=Metrix[u][j];
                path[j]=u;
            }
        }
    }
    return ret;
}

注意比较内层第2个for内if部分与dijkstra算法异同。

http://blog.youkuaiyun.com/waytoaccept/article/details/49473567

例题:http://acm.hdu.edu.cn/showproblem.php?pid=1233

#include <iostream>
#include<stdio.h>
#define N 205
#define MAX 0x03fffffff
using namespace std;
int Metrix[N][N];
int dist[N];
int visit[N];
int path[N];

int Prim(int root,int NV)
{
    int ret=0,u=root;
    for(int i=1;i<=NV;i++)
    {
        dist[i]=MAX;
        visit[i]=0;
        path[i]=i;
    }
    dist[u]=0;
    for(int i=1;i<=NV;i++)
    {
        int min_value=MAX;
        for(int j=1;j<=NV;j++)
        {
            if(visit[j]==0&&dist[j]<min_value)
            {
                min_value=dist[j];
                u=j;
            }
        }
        if(min_value==MAX)return -1;
        visit[u]=1;
        ret+=dist[u];
        for(int j=1;j<=NV;j++)
        {
            if(visit[j]==0&&Metrix[u][j]<dist[j])
            {
                dist[j]=Metrix[u][j];
                path[j]=u;
            }
        }
    }
    return ret;
}
int main()
{
    int n;
    while(EOF!=scanf("%d",&n)&&n)
    {
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                if(i==j)
                {
                    Metrix[i][j]=0;
                }
                else
                {
                    Metrix[i][j]=MAX;
                    Metrix[j][i]=MAX;
                }
            }
        }
        int s,t,d,Q;
        Q=n*(n-1)/2;
        for(int i=0;i<Q;i++)
        {
            scanf("%d%d%d",&s,&t,&d);
            Metrix[s][t]=Metrix[t][s]=d;
        }
        int root=1;
        cout<<Prim(root,n)<<endl;
    }
    return 0;
}


Prim算法求最小生成树及其权重 【问题描述】输入有n个顶点的连通图,第一行给出节点个数和边的数目,然后依次输入两个点和两点线段的长度,最后输出最小生成树序列和最小权重。【结构体定义】#include &lt;stdio.h&gt; #include &lt;mm_malloc.h&gt; int N; #define MAX 9999 typedef struct edge_node { int incr_vert ,ve... 阅读详情

相关推荐

最小生成树-prim、kruskal算法

学习之前建议温习一下迪杰斯特拉算法和并查集~先简单认识下最小生成树:最小生成树是,即:以最小的成本(边的权值)将图中所有节点链接到一起。图中有n个节点,那么一定可以用n-1条边将所有节点连接到一起。那么就是最小生成树算法的任务所在。下面我们以一道模板题来讲解如何解决这个问题~~

qq_73704268的博客 1000

Prim算法实现最小生成树

Prim算法求最小生成树: 1. 从任意一个顶点(假设选1)开始构造生成树,首先将顶点1加入生成树中,用一个一维数组book标记那些顶点已经加入到了生成树中。 2. 用数组dis记录生成树到各个顶点的距离。最初生成树只有1号顶点,有直连边时,数组dis中存储的就是1号顶点到该顶点的边的权值,没有直连边的时候就是无穷大(INT_MAX),即初始化数组。 3. 从数组dis中选出离生成树最近的顶点(假设为顶点j)加入到生成树中(在数组dis中的最小值)。再以j为中间点,更新生成树到每一个非树顶点的距离,如果

qq_44423388的博客 1万+

Graybox Overview

Graybox功能使能够在sub_module上执行扫描和ATPG操作,然后能够在更高层次的层次上执行扫描和ATPG操作时使用该子模块的简化的Graybox表示,从而简化了分层设计中的扫描插入和ATPG操作过程。由于子模块的graybox表示只包含极少量的互连电路(子模块与top的互连),在大型分层设计中使用graybox可以极大地减少执行扫描插入,优化计时,分析故障和创建测试pattern所需的memory和工具runtime。

weixin_44954910的博客 1080

最小生成树——prim算法

最小生成树(Minimum Spanning Tree,MST)是在一个给定的无向图G(V,E)中求一棵树T,使得这棵树拥有图G中的所有顶点,且所有边都是来自图G中的边,并且满足整棵树的边权之和最小。下图给出了一个图G及其最小生成树T,其中较粗的线即为最小生成树的边。可以看到,边AB、BC、BD包含了图G的所有顶点,且由它们生成的树的边权之和为6,是所有生成树中权值最小的。 最小生成树有3...

分享包括但不限于计算机基础知识、数据结构与算法、Golang技术栈。年与时驰,意与日去,遂成枯落,多不接世,悲守穷庐,将复何及! 1万+

博图V16与840D sl数控系统PLC编程实战指南

本文为西门子840D sl数控系统的PLC编程实战指南,详细介绍了如何使用博图V16软件配置编程环境。内容涵盖从项目创建、核心程序块(如DB、FB)解析到OB1主循环编程的完整流程,并提供了高级调试技巧与联调避坑指南,帮助工程师快速上手并高效完成系统集成与逻辑控制。

weixin_29193259的博客 527

Isaac Gym摄像头数据获取全攻略:从CPU到GPU,教你实时显示RGB与深度图

本文详细介绍了在Isaac Gym中获取摄像头数据的两种高效方案:CPU模式与GPU张量模式。通过实战代码示例,展示了从摄像头配置、数据获取到实时可视化RGB与深度图的全流程,帮助开发者优化机器人仿真与计算机视觉应用的性能。特别强调了GPU模式下的零拷贝访问与张量运算优势,适用于需要低延迟处理的场景。

weixin_29056701的博客 387

C语言实现Prim算法 —构建最小生成树

介绍Prim算法前的相关概念 一、Prim算法的思想 二.1、利用图形详细解释Prim算法的思想 二.2利用图形又又解释Prim算法的思想 三、用图示结合代码中重要量进行说明 四、代码实现(用c语言)

weixin_52375817的博客 1万+

Carsim2019与Simulink (Matlab2018b)联合仿真成功(超详细)

Carsim与Simulink联合仿真成功

强强的博客 3万+

Prim算法求最小生成树

求无向网的最小生成树的算法有两种:Prim和Kruskal,它们都是利用最小生成树的MST性质得到的。我们先来介绍Prim算法,Kruskal我们后续介绍。 Prim算法思想: 逐渐长成一棵最小生成树。假设G=(V,E)是连通无向网,T=(V,TE)是求得的G的最小生成树中边的集合,U是求得的G的最小生成树所含的顶点集。初态时,任取一个顶点u加入U,使得U={u},TE=Ø。重复下述操作:找出U和...

yyzsir的博客 4万+

跨平台C#上位机开发:.NET MAUI与工业物联网的融合实战

NET MAUI正在重塑工业上位机的开发模式——从“为单一设备定制”转向“全场景覆盖”。其价值不仅在于“代码复用”,更在于打通了工业物联网的“最后一公里”:让边缘设备、云平台、移动终端通过统一的数据模型协同工作。未来,随着.NET MAUI对WebAssembly的支持(计划在.NET 9实现),上位机甚至可直接运行在浏览器中,进一步降低部署门槛。对于工业开发者,掌握跨平台技术意味着能更快响应多样化的现场需求,从“Windows专家”升级为“全栈工业开发者”。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1088

基于计算机视觉的无人便利店技术:从算法到部署的系统化实战指南

摘要:本文系统介绍了基于计算机视觉的无人便利店技术方案,提出"商品检测-跟踪-动作识别-防损-结算"五段式流水线架构。详细阐述了YOLOv8-Seg商品检测、OC-Sort多目标跟踪、3D-CNN+ST-GCN动作识别等核心算法实现,并完成NVIDIA Jetson Xavier NX边缘端的优化部署。通过TensorRT量化、DeepStream加速等技术手段,系统在保持94.7%动作识别准确率的同时,将漏单率降至0.8%,单店云端算力成本较行业平均降低84%。所有代码已开源,可直接应

博客 624

最小生成树:Prim算法

讲构建最小生成树的算法前,先来回顾一下什么是生成树,什么是最小生成树?生成树是指:在一个连通图Graph中,包含Graph中所有n个顶点的极小连通子图,一定包含Graph中的n-1条边(如果小于n-1条边,生成树会不连通。如果大于n-1条边,就一定会产生回路,那么就不是树了,树中不能产生回路)。且生成树不唯一。举个例子: 这个无向连通图的生成树分别有 什么是最小生成树? ...

大力海棠的博客 2万+

基于经验模态分解和核主成分分析结合长短期记忆网络EMD-KPCA-LSTM的光伏功率预测算法--Matlab

基于经验模态分解和核主成分分析结合长短期记忆网络EMD-KPCA-LSTM的光伏功率预测算法--Matlab

前程算法屋的博客 625

C/C++ 最小生成树—Prim算法

一、最小生成树 二、Prim算法(普里姆算法) 三、举一个栗子(镖局运镖)

Carizy的博客 4487

错误代码:11300001 数据集 [xxx] 配置错误“=”附近有语法错误(原理分析)

错误代码:11300001 数据集 [1_Workshift] 配置错误“=”附近有语法错误。

码农研究僧的博客 915

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【数据结构】最小生成树Prim算法

概况 最小生成树是是原图的极小连通子图,是最小权重生成树的简称。其特点是:图中包含原图中的所有 n 个结点,并且有保持图连通的最少的边。 求最小生成树有两种算法,分别是:Kruskal(克鲁斯卡尔)算法、Prim(普里姆)算法。 本文将介绍笔者对Prim算法的理解。Kruskal算法将在后续文章介绍。 Prim算法 该算法需要用邻接矩阵存储图(使用edge数组记录边的权值,vertex数组存储顶点数据)。 class MGraph { public: MGraph(DataType a[ ], in

zgsdlr的博客 3031

visio安装包

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

prim算法求最小生成树

描述: 使用prim算法求某图的最小生成树的边的权值输出的序列。例如下图的最小生成树的权值输出序列为1 4 2 5 3,要求从V1顶点开始生成最小生成树。 输入: 若干行整数 第一行为两个整数,分别为图的顶点数和边数 第二行开始是该图的邻接矩阵,主对角线统一用0表示,无直接路径的两点用100来表示(保证各边权值小于100) 输出: 若干用空格隔开的整数 样例输入: 6 10 0 6 1 5 10...

clzZ2的博客 6732

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

最小生成树Prim算法理解

MST(Minimum Spanning Tree,最小生成树)

在路上的学习者 17万+

最小生成树 Prim 算法

4. 从T类的所有顶点出发(A,B),与G类中的顶点相连通的边分别是权值为A->C=2,A->D=3 ,B->C=7,B->E=8 的四条边,选择权值为A->C=2那条最小的边作为最小生成树的一部分,将其所连的属于G类中的顶点C移到T类中,得到 T={A,B,C},G={D,E,F}。2.在 G 类中任选一个顶点作为 最小生成树的起点,假设选择顶点 A,然后将顶点 A 移到 G类中,就有 T={A},G={B,C,D,E,F}。1.将图中的所有顶点分为 T 类 和 G 类,初始状态下,T = {

qq_64485082的博客 1825

最小生成树—Prim算法

我们要讨论的问题是如何在一个中找到它的最小生成树,虽然这个问题对有向图也有意义,但是处理起来更麻烦。一个无向图 G 的最小生成树就是连接 G 上所有顶点的边构成的树,且这些边的总权值最低。当且仅当图是才有最小生成树。在无向图的最小生成树中,边的条数为。最小生成树是一棵树,因为它无圈;边的总权值最低,所以它最小;包含所有顶点,所以是生成树。显然,最小生成树是包含所有顶点的最小的树。如果我们需要给一所房子里安装电路,那么这就是一个最小生成树问题。对于任意生成树,如果向树中增加一条不属于树的边。

thdwx的博客 2158

Prim求最小生成树

2022.01.07一、最小生成树几种算法的对比二、Prim算法1.一些概念2.基本思路3.Prim算法求最小生成树 一、最小生成树几种算法的对比 朴素版Prim算法主要用于稠密图,用邻接矩阵;堆优化版Prim用于稀疏图,用邻接表; Kruskal算法是一个很优美的算法,适用于稀疏图,且时间复杂度与堆优化版Prim一致,因此最小生成树一般用朴素版Prim和Kruskal。 二、Prim算法 1.一些概念 树:连通、无圈图。 生成树:如果一棵树T是连通图G的生成子图,则称树T为图G的生成树或支撑树。 最小生

QAQwhq的博客 1531

prim算法构造最小生成树

假设G=(V,E)是连通的,TE是G上最小生成树中边的集合。算法从U={u0}(u0∈V)、TE={}开始。重复执行下列操作: 在所有u∈U,v∈V-U的边(u,v)∈E中找一条权值最小的边(u0,v0)并入集合TE中,同时v0并入U,直到V=U为止。 此时,TE中必有n-1条边,T=(V,TE)为G的最小生成树。 #include #include #include #include using namespace std; const int maxn=1005; const int INF=0

a1234567924的博客 4002

Prim 最小生成树(图解)

Prim 最小生成树 图解

m0_63658130的博客 4254

最小生成树Prim算法

所谓最小生成树,就是一个图的极小连通子图,它包含原图的所有顶点,并且所有边的权值之和尽可能的小,不需要形成环路。 最小生成树可能不为一,但权值一定相等 package com.neusoft.data.structure; import java.uti...

开心就好 6290
上一篇: 次短路(第二最短路径)
下一篇: 次小生成树
WayToAccept
博客等级 码龄14年 21粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值