PRIM 和 KRUSKAL 的區別
1. 單位不同 Prim 以點為單位 以邊為判定條件 找出 代價最小的點。 KRUSKAL 是以 邊的為單位 ,以點為 判定條件找出可用的邊
2. 算法的數據結構不同, PRIM 針對的是 鄰接矩陣 ,Kruskal 針對 是 邊集數組
1. 把所有權值的邊進行排序
2. 找出最小權值最小的邊,記錄此時連接的點
3. 繼續尋找 下個權值最小的邊,如果 此時形成的圖沒有環,此邊就生效,并記錄心新連接的點
4. 重復上述步驟 ,直到連接了所有的邊
9fb316cd967dc54ff48dd62a2719aeb0.jpg
void MiniSpanTree_kursKal(MGraph G)
{
int find(int * parent,int f);
int i,n,m,maxedges;
maxedges= MAXVEX*(MAXVEX-1)/2;
Edge edges[maxedges];
int parent[MAXVEX];
for(i=0;i<G.numVertexes;i++)
{
parent[i]=0;
}
for (i = 0; i <G.numEdeges ; ++i)
{
n= find(parent,edges[i].start);
m=find(parent,edges[i].end);
if(n!=m)
{
parent[n]=m;
}
}
int find(int * parent, int f)
{
while(parent[f]>0)
{
f=parent[f];
}
return f;
}
}