c++最小生成树两种方法:Prim算法 和 Kruskal算法

本文介绍了使用C++实现Prim和Kruskal算法来找到图的最小生成树。Prim算法从一个节点开始,逐步添加最小权重的边,确保生成树的连通性;Kruskal算法则是通过选择权重最小的安全边来构建最小生成树。两种算法各有特点,理解并掌握它们对于解决图论问题至关重要。
摘要由CSDN通过智能技术生成

c++最小生成树两种方法: Prim算法 和 Kruskal算法

  • 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的最小生成树。 Prim算法的核心:始终保持TE中的边集构成一棵生成树。

算法过程:
随意选取一点 , 寻找最小权值

代码如下:

#include <bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f,maxn=100,maxm=maxn*maxn;

struct edge{
   
	int from,to,w,nxt;
}e[maxm];

int n,m,head[maxn],cnt,dis[maxn],u,v,w,ans;
bool vis[maxn];

void add(int u,int v,int w){
   
	e[++cnt].from=u;
	e[cnt].to=v;
	e[cnt].w=w;
	e[cnt].nxt=head[u];
	head[u]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值