最小生成树kruskal

 数据来自最小生成树(二)kruskal算法及存储结构_哔哩哔哩_bilibili⁤

#include <iostream>
#include <queue>
#include <string>
#include <stack>
#include <vector>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <cmath>
using namespace std;

#define ll unsigned long long
#define INF 0x7fffffff
typedef pair<int, int> PII;

struct Node {
	int s, e, w; //起点, 终点, 边权
};

Node edge[10];
int fa[6];
int wsum = 0;

int findfa(int x) {
	if (fa[x] == x) return x;
	return fa[x] = findfa(fa[x]);
}

void kruskal() {
	for (int i = 0; i < 6; i++) fa[i] = i;
	sort(edge, edge + 10, [&](Node a, Node b) -> bool{
		return a.w < b.w;
	});
	for (int i = 0; i < 10; i++) {
		int a = findfa(edge[i].s);
		int b = findfa(edge[i].e);
		if (a != b) {
			fa[a] = b;
			sum += edge[i].w;
		}
	}
	return;
}

int main() {
	edge[0].s = 0, edge[0].e = 1, edge[0].w = 6;
	edge[1].s = 0, edge[1].e = 2, edge[1].w = 1;
	edge[2].s = 0, edge[2].e = 3, edge[2].w = 5;
	edge[3].s = 1, edge[3].e = 2, edge[3].w = 5;
	edge[4].s = 1, edge[4].e = 4, edge[4].w = 3;
	edge[5].s = 2, edge[5].e = 3, edge[5].w = 5;
	edge[6].s = 2, edge[6].e = 4, edge[6].w = 6;
	edge[7].s = 2, edge[7].e = 5, edge[7].w = 4;
	edge[8].s = 3, edge[8].e = 5, edge[8].w = 2;
	edge[9].s = 4, edge[9].e = 5, edge[9].w = 6;
	kruskal();
	cout << wsum;
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云儿乱飘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值