#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;
}
最短路径问题-prim算法和kruscal算法(C)
最新推荐文章于 2023-09-24 15:04:50 发布