Prime算法
掌握思想最重要,代碼只是練習
MST_Prim(Graph G){
int min_weight[G.vexnum];
int adjvex[G.vexnum];
for(int i=0;i<G.vexnum;i++){
min_weight[i]=G.Edge[0][i];
adjvex[i]=0;
}
int min_arc;
int min_vex;
for(int i=1;i<G.vexnum;i++){
min_arc=MAX;
for(int j=1;j<G.vexnum;j++){
if(min_weight[j]!=0 && min_weight[j]<min_arc){
min_arc=min_weight[j];
min_vex=j;
}
min_weight[min_vex]=0;
for(int j=0;j<G.vexnum;j++){
if(min_weight[j]!=0 && G.Edge[min_vex][j]<min_weight[j]){
min_weight[j]=G.Edge[min_vex][j];
adjvex[j]=min_vex;
}
}
}
}
}
Kruskal算法
堆排序,並查集
typedef struct Edge{
int a,b; 邊的2個端點
int weight; 邊的權值
};
void MST_Kruskal(Graph G,Edge *edges,int *parent){
heap_sort(edges);
Initial(parent);
for(int i=0;i<G.arcnum;i++){
int a_root=find(parent,edges[i].a);
int b_root=find(parent,edges[i].b);
if(a_root!=b_root) Unite(parent,a_root,b_root);
}
}