Prim:用于点少的情况
1.初始minn[1]=0,更新所有与1号点相连的边,由此更新此边的另一端点的minn值(所有点的minn都这么更新)
2.更新之后再寻找最短的minn值加入树,bool标记已经入树,最后把每个点的minn值相加
Kruskal:用于边少的情况
1.用自定义结构体存储边的信息
struct node{
int from,to,len;
}edge[M];
2.以len的大小排序
bool cmp(const node &a,const node &b){
return a.len<b.len;
}
sort (edge+1,edge+cnt+1,cmp);
3.依次按边从短到长加入树,每加入一条边,union边两端的端点,当加入边数为n-1时输出答案
for (int i=1;i<=cnt;i++){
int x=getfather(edge[i].from),y=getfather(edge[i].to);
if (x!=y){
father[x]=y;
tot++;
ans+=edge[i].len;
if (tot==n-1) break;
}
}