最短路径问题-prim算法和kruscal算法(C)

本文介绍了两种经典的图论算法——Prim算法和Kruskal算法,用于寻找加权无向图的最小生成树。Prim算法适合边稠密图,时间复杂度为O(|V|^2),而Kruskal算法适用于边稀疏图,时间复杂度更低。这两种算法通过不断添加边来构造最小生成树,确保在过程中不形成环路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostram> 
using namespace std;
/*
		Prim算法的步骤如下:
		假设G={V,E}是连通树,其最小生成树T=(U,Et),Et是最小生成树中
		变得集合。
		初始化:向空树T=(U,Et)中添加图G=(V,E)的任一顶点u0,使U={uo},
		ET=空。
		循环(重复下列操作直至U=V);从图G中选择满足{(u,v)u属于U, v属
		于V - U}且具有最小权值的边(u.v),加入树T,置U归于{v},ET=ET归
		于{(u,v)}。
*/

/*		Prim算法的简单实现,用于求解边稠密的图的最小生成树 
		其时间复杂度为O(|v|平方)		
*/ 
void Prim(G,T) {
	T  =;	//初始化空树
	U = {w};	//添加在一顶点w
	while((V-U) !=){		//若树中不含全部节点 (u,v)是使u属于U与v属于(V-U),且权值最小的边;
		T =  T属于{(u,v)};		//边归入树
		U = U属于{v};		//顶点归入树 
	} 
	 
}

/*
		Kruskal算法的步骤如下:
   		假设G=(V,E)是连通图,其最小生成树T=(U, Er)。 .
		初始化:U=V,ET=空。即每个顶点构成一棵独立的树,T此时是一个仅
		含|V|个顶点的森林。
		循环(重复下列操作直至T是一棵树):按G的边的权值递增颇序依
		次从E-ET中选择一条边,若这条边加入T后不构成回路,则将其加
		入ET,否则舍弃,直到E中含有n-1条边。
				Kruskal算法适用于边稀疏而顶点较多的图 
*/

void Kruskal(V,T){
	T = V;		//初始化树T,仅含顶点
	nums = n;		//连通分量数
	while(nums > 1){		//若连通分 
		从E中取出权值最小的边(v,u);
		if(v中u属于T中不同的连通分量){
			T = T属于{(v,u)};		//将此便加入生成树中
			nums--;		//连通分量数减一 
		} 
	} 
} 
int main(){
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值