【蓝桥杯--图论】最小生成树prim、kruskal


今日语录: 成功不是终点,失败不是致命,勇气才是取胜的关键。

文章目录

prim算法

cpp 复制代码
#include <cstring>
#include <algorithm>
#include <iostream>

#define _CRT_SECURE_NO_WARNINGS
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;

		if (i && dist[t] == INF)return INF;
		if (i)res += dist[t];

		for (int j = 1; j <= n; j++)dist[j] = min(dist[j], g[t][j]);

		st[t] = true;
	}
	return res;
}

int main()
{
	scanf("%d%d", &n, &m);

	memset(g, 0x3f, sizeof g);

	while (m--)
	{
		int a, b,c;
		scanf("%d%d%d", &a, &b, &c);
		g[a][b] = g[b][a] = min(g[a][b], c);
	}
	int t = prim();

	if (t == INF)puts("impossible");
	else printf("%d\n", t);

	return 0;
}

kruskal算法(稀疏图)

cpp 复制代码
#include <algorithm>
#include <iostream>

#define _CRT_SECURE_NO_WARNINGS
using namespace std;

const int N = 10010;

int n, m;
int p[N];

struct Edge
{
	int a, b, w;

	bool operator< (const Edge& W)const
	{
		return w < W.w;
	}
}edges[N];

int find(int x)
{
	if (p[x] != x)p[x] = find(p[x]);
	return p[x];
}

int main()
{
	scanf("%d%d", &n, &m);

	for (int i = 0; i < m; i++)
	{
		int a, b, w;
		scanf("%d%d%d", &a, &b, &w);
		edges[i] = { a,b,w };
	}

	sort(edges, edges + m);

	for (int i = 1; i <= n; i++)p[i] = i;

	int res = 0, cnt = 0;
	//res存储最小生成树中的权重之和
	//cnt存储的是当前存储了多少条边
	for (int i = 0; i < m; i++)
	{
		int a = edges[i].a, b = edges[i].b, w = edges[i].w;

		a = find(a), b = find(b);
		if (a != b)
		{
			p[a] = b;
			res += w;
			cnt++;
		}
	}

	if (cnt < n - 1)puts("impossible");
	else printf("%d\n", res);
	return 0;
}
相关推荐
罗湖老棍子39 分钟前
[USACO05NOV] Asteroids G(洛谷-P7368)
算法·图论·二分图匹配·最大匹配·最小顶点覆盖
我命由我123451 小时前
准入类与水平类职业资格
笔记·学习·职场和发展·产品运营·求职招聘·职场发展·产品经理
小 黄 鸡12 小时前
HashMap 面试必会知识点详解(JDK 8)
java·面试·职场和发展
无敌贵点大王17 小时前
嵌入式软件面试经(自用)
c语言·stm32·单片机·学习·mongodb·面试·职场和发展
程序 代码狂人17 小时前
数据开发面试【问答完整版|带深挖追问 + 扩展回答】
面试·职场和发展
浅念-20 小时前
动态规划:线性DP——多状态DP与子数组专题笔记
c++·笔记·算法·leetcode·职场和发展·动态规划·力扣
天真小巫21 小时前
2026.10.14总结
职场和发展
鸥梨菌Honevid21 小时前
UVM 面试高频:uvm_test_top 与 uvm_config_db 路径机制全解析
数据库·面试·职场和发展
Interview Aid1121 天前
Capital One Interview 完整指南:招聘流程、OA 真题与技术面试准备
面试·职场和发展
虚无的纽扣1 天前
【力扣刷题】第四天:三数之和、四数之和
算法·leetcode·职场和发展