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

既然给出了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--;
		}
	}
}

猜你喜欢

转载自blog.csdn.net/chenhanxuan1999/article/details/86103334