王道考研数据结构图——Prim和Krustra

目录

图的最小生成树

Prim算法

Krustra算法


 

图的最小生成树

Prim算法

算法思想:从任意一个顶点出发,每次更新顶点与生成树的距离寻找距离生成树距离最近的顶点

void Prim(int Point){
	//如果顶点未被访问过 
	if(!visiable[Point]){
		int min = n;
		//更新集合外的点与树的距离 
		for(int i = 1 ; i <= n ; i ++){
			if(visiable[i]==0&&i!=Point){
                //这里有点动态规划的意思
				dist[i] = GetMin(Matrix[Point][i]+dist[Point],dist[i]);
				//获取距离树最短的点
                if(dist[i]

Krustra算法

算法思想:从任意一条边出发,每次选取weight最小并且含有未加入集合的顶点的边,并把该顶点加入集合。

Krustra算法分成两部分:

第一部分是并查集,第二部分是优先队列使用。

并查集搜索根节点

int find(int x){
	if(root[x]!=x) return find(root[x]);
	return x;
}

数据结构

class Node{
	int PointA,PointB,weight;
};

 实现伪代码

//Krustra算法实现 
void Krustra(){
	priority_queueque;
	//将边放入优先队列中
	while(有边未加入优先队列中){
		que.push(node);
	}
	while(que.size()){
		//获得最短的一条路  
		Node front = que.top();
		//并查集 
		if(find(root[front.PointA]!=front.PointB){
			root[front.PointA] = front.PointB;
			length += front.weight;
		} 
		que.pop();
	}
 
}

 

 

你可能感兴趣的:(C++数据结构)