克魯斯卡爾演算法

2021-08-21 17:22:10 字數 1136 閱讀 9648

via:

/克魯斯卡爾演算法

//在連通網中求出最小生成樹

#include #include #define maxedge 20

#define maxvex 20

#define infinity 65535

typedef struct

mgraph;

typedef struct

edge; //對邊集陣列edge結構的定義

//建立圖的鄰接矩陣

void createmgraph(mgraph *g)

}g->arc[0][1]=7;

g->arc[0][3]=5;

g->arc[1][2]=8;

g->arc[1][3]=9;

g->arc[1][4]=7;

g->arc[2][4]=5;

g->arc[3][4]=15;

g->arc[3][5]=6;

g->arc[4][5]=8;

g->arc[4][6]=9;

g->arc[5][6]=11;

for(i = 0; i < g->numvertexes; i++)

} }//快速排序的條件

int cmp(const void* a, const void* b)

//找到根節點

int find(int *parent, int f)

return f;}

// 生成最小生成樹

void minispantree_kruskal(mgraph g) }}

//為邊集陣列edge排序

qsort(edges, g.numedges, sizeof(edge), cmp);

for (i = 0; i < g.numvertexes; i++)

parent[i] = 0;

printf("列印最小生成樹:\n");

克魯斯卡爾演算法

測試輸入包含若干測試用例。每個測試用例的第1行給出評估的道路條數 n 村莊數目m 100 隨後的 n 行對應村莊間道路的成本,每行給出一對正整數,分別是兩個村莊的編號,以及此兩村莊間道路的成本 也是正整數 為簡單起見,村莊從1到m編號。當n為0時,全部輸入結束,相應的結果不要輸出。對每個測試用例,在...

克魯斯卡爾演算法

設n v,是連通網 1 令最小生成樹的初始狀態為只有n個頂點而無邊的非連通圖t v,圖中每個頂點自成乙個連通分量 2 在e中選擇代價最小的邊,若該邊依附的頂點落在t中不同的連通分量上,則將此邊加入到t中,否則捨去此邊而選擇下一條代價最小的邊 3 反覆執行第2 步,直至t中所有頂點都在同一連通分量上為...

克魯斯卡爾演算法

克魯斯卡爾演算法也是用來尋找乙個圖的最小生成樹的演算法,與prim演算法相同的是,二者都採用由小及大的策略,逐步將整個圖的最小生成樹求出,但二者不同的地方在於prim演算法逐步歸併頂點,而克魯斯卡爾演算法則是逐步歸併邊。演算法思想 設聯通網路n 1 構造乙個只有n個頂點,沒有邊的非連通圖t 每個頂點...