图论---朴素Prim(稠密图)

O( n ^2 )

  • 题目通常会提示数据范围:

    • 若 V ≤ 500,两种方法均可(朴素Prim更稳)。

    • 若 V ≤ 1e5,必须用优先队列Prim + vector 存图。

cpp 复制代码
// 最小生成树 ---朴素Prim
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
 
const int N=510,INF=0x3f3f3f3f;
int n,m;
int g[N][N];
int dist[N]; //表示这个点到集合的距离
bool st[N];
 
int prim()
{
	memset(dist,0x3f,sizeof dist);
	int res=0;
	for(int i=0;i<n;i++)
	{
		int t=-1;
		//找到集合外距离集合最近的点
		for(int j=1;j<=n;j++)
            //找到不在集合当中,且距离集合最近的一个点
			if(!st[j] && (t==-1||dist[t]>dist[j]))
				t=j;
        //举例集合最近的点的距离是INF,说明图不连通
		if(i && dist[t]==INF) return INF;
		//只要不是第一个点,就把新加进来的这条边加到答案里
		if(i) res+=dist[t];
		//用 t 来更新其它的点
		for(int j=1;j<=n;j++) dist[j]=min(dist[j],g[t][j]);
		st[t]=true;
	}
	return res;
}
 
int main()
{
	cin>>n>>m;
	memset(g,0x3f,sizeof g);
	while(m--)
	{
		int a,b,c;
		cin>>a>>b>>c;
		g[a][b]=g[b][a]=min(g[a][b],c);
	}
	int t=prim();
	if(t==INF) puts("impossible");
	else cout<<t<<endl;
	return 0;
}
相关推荐
飞Link1 小时前
什么是 PX4?一文了解 PX4 在空地协同中的作用
算法·无人机
进化中的刀盾兽2 小时前
从零实现 C++ Json-Rpc(十):把消息交给真实连接——MuduoConnection 与 ConnectionFactory
c++·rpc
一去不复返的通信er8 小时前
力扣-图论-岛屿数量
算法·leetcode·图论
青瓦梦滋8 小时前
WebSocket协议
linux·服务器·网络·c++·websocket·网络协议·http
程序 代码狂人10 小时前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
HDU-Dade11 小时前
【校招笔试真题】简要介绍 Self-Attention 的前沿算法
人工智能·算法
小郎君65813 小时前
Vue keep-alive 切标签后滚动位置回顶?因为 onDeactivated 里读到的 scrollTop 是 0
算法
CodeYp201913 小时前
第15讲:二叉搜索树
开发语言·c++·二叉搜索树
邵奈一14 小时前
GPT-6.1 Terra速度是Sol的3倍,价格减半
算法
RaaS10014 小时前
Node.js Brotli RCE 漏洞自查指南:fetch、undici、axios 都在影响面,三分钟确认你的版本
人工智能·深度学习·算法