当前位置: 首页 > article >正文

最小生成树Prim算法

文章目录

  • 最小生成树是什么
  • Prim算法是什么
    • 模板

最小生成树是什么

最小生成树是使图中连接起来与小的最小代价

在这里插入图片描述
上边这张图的最小生成树就是下图
在这里插入图片描述

Prim算法是什么

Prim算法就是给你一个起点,每次找与这个点相邻边的最小值,直到遍历每个节点

模板

#include <bits/stdc++.h>
#define lowbit(x) ((x)&(-x))
#define int long long
#define endl '\n'
#define PII pair<int,int> 
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
using namespace std;
int n,m,st[100],d[100];
struct asd{
	int v,w;
};
vector<asd>v[100];
void init()
{
	for(int i=0;i<=n;i++)
	{
		st[i]=0;
		v[i].clear();
		d[i]=1e9;
	}
}
int prim()
{
	d[1]=0;
	int sum=0;
	for(int i=1;i<=n;i++)
	{
		int u=0;
		for(int j=1;j<=n;j++)
		{
			if(d[u]>d[j]&&!st[j])
			u=j;
		}
		sum+=d[u];
	    st[u]=1;
	    for(auto x:v[u])
	    {
	    	if(d[x.v]>x.w)
	    	d[x.v]=x.w;
		}
	}
	return sum;
 } 
signed main()
{
	IOS
	int T=1;
	//cin>>T;
	while(T--)
	{
		int a,b,c;
		while(cin>>n&&n)
		{
			init();
			cin>>m;
			while(m--)
			{
				cin>>a>>b>>c;
				v[a].push_back({b,c});
				v[b].push_back({a,c});
			} 
			cout<<prim()<<endl;
		}
	}
	return 0;
}

http://www.kler.cn/a/530745.html

相关文章:

  • 【实战篇】Android安卓本地离线实现视频检测人脸
  • Linux02——Linux的基本命令
  • ArkTS语言介绍
  • 跨域问题解决实践
  • 前端面试笔试题目(一)
  • Windsurf cursor vscode+cline 与Python快速开发指南
  • QMK启用摇杆和鼠标按键功能
  • 软考高项笔记 信息技术及其发展
  • 2025蓝桥杯JAVA编程题练习Day2
  • 排序算法--希尔排序
  • [ Javascript ] WebStorm Create Node+TypeScript Project
  • 软件测试02----用例设计方法
  • Kafka下载
  • Linux进阶——时间服务器
  • Flutter Scaffold 页面结构
  • 类加载器详解
  • [权限提升] Windows 提权 维持 — 系统错误配置提权 - 注册表权限配置错误提权
  • 《机器学习数学基础》补充资料:仿射变换
  • Linux:宏观搭建网络体系
  • t基础使用--6---git常用命令
  • node模块查找策略
  • MQTT 术语表
  • Windows和苹果MacOS上的vscode翻页及上下滚动行快捷键
  • 给AI加知识库
  • WPF进阶 | WPF 动画特效揭秘:实现炫酷的界面交互效果
  • Vulkan 学习(13)---- Vulkan Framebuffercommand buffer