[C++]kruaskal的伪代码描述

本文详细介绍了Kruskal算法的实现过程,通过定义边结构体并使用比较函数,实现了最小生成树的构建。从邻接表加载数据到边数组,然后进行排序,使用并查集判断边是否构成环,最终形成最小生成树。

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

既然给出了prim的,就顺便写一下Kruskal的伪代码描述:

struct Edge{
	int u, v, w; //u for starting point, v for end point, w for weight
	Edge(int u, int v, int w){
		this->u = u;
		this->v = v;
		this->w = w;
	}
	Edge(int u, int v){
		this->u = u;
		this->v = v;
	}
	Edge(){}
	~Edge(){}
};
bool cmp(Edge edge1, Edge edge2){
	return edge1.w < edge2.w;
}
void Kruskal(Graph* G){
	ParPtrTree A(G->n());
	Edge edge[G->n];
	int eid = 0; //edge's id starts from 0 to (G->n - 1)
	for(int i = 0 ; i < G->n() ; i++){
		for(int w = G->first(i) ; w < G->n() ; w = G->next(i, w)){
			edge[eid].u = i;
			edge[eid].v = v;
			edge[eid++].w = w; 
		}
	} // load data from adjacency list to edge array
	qsort(edge, edge + G->n(), cmp);
	int vertices = G->n();
	for(int i = 0 ; i < G->n() && vertices > 1 ; i++){
		if(A.differ(edge[i].u, edge[i].v)){
			A.UNION(v, u);
			addEdgetoMST(edge[i].u, edge[i].v);
			vertices--;
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值