克魯斯卡爾演算法

2021-07-24 15:27:29 字數 1219 閱讀 3329

n=(v,)是連通網

1)令最小生成樹的初始狀態為只有n個頂點而無邊的非連通圖t=(v, {}),圖中每個頂點自成乙個連通分量

2)e中選擇代價最小的邊,若該邊依附的頂點落在t中不同的連通分量上,則將此邊加入到t中,否則捨去此邊而選擇下一條代價最小的邊

3)反覆執行第2)步,直至t中所有頂點都在同一連通分量上為止。

t=(v, )n的最小生成樹。

#include #include #include #define max 20

using namespace std;

typedef structvexnode;

typedef structedgenode;

int cmp(edgenode a, edgenode b)

void kruskal(edgenode e, int vexnum, int arcnum)

int m1,m2,n1,n2,j,k = 1;

i = 0;

printf("\n*****華麗分割線*****\n");

while(k < vexnum)

} i ++; }

}int main()

sort(e,e+arcnum,cmp);

kruskal(e,vexnum,arcnum);

return 0;

}

克魯斯卡爾演算法

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

克魯斯卡爾演算法

via 克魯斯卡爾演算法 在連通網中求出最小生成樹 include include define maxedge 20 define maxvex 20 define infinity 65535 typedef struct mgraph typedef struct edge 對邊集陣列edge...

克魯斯卡爾演算法

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