C語言 最小生成樹(Kruskal演算法)

2021-10-07 03:53:49 字數 1936 閱讀 5752

建立邊集圖(createedgegraph)

列印圖(print)

排序函式(sort)

頂點下標查詢函式(locatevex)

查詢雙親函式(findroot)

克魯斯卡爾演算法(minispantree_kruskal)

typedef

struct

edge;

//邊集陣列edge的單元

typedef

struct

edgegraph;

void

sort

(edgegraph *e)}}

}

int

findroot

(int t,

int parent)

//t接收到是結點在vertex陣列中的下標

return t;

//將找到的根節點返回,若沒有根節點返回自身

}

void

minispantree_kruskal

(edgegraph *e)

printf

("\n 最小生成樹(kruskal):\n\n");

//3.

for(num=

0,i=

0;iedgenum;i++)}

}}

#include

#include

#define vertexmax 20

//最大頂點數為20

typedef

char vertextype;

typedef

struct

edge;

//邊集陣列edge的單元

typedef

struct

edgegraph;

void

createedgegraph

(edgegraph *e)

}void

print

(edgegraph *e)

printf

("\n\n");

printf

(" 邊集陣列edge:\n\n");

printf

("\t\tbegin end weight\n");

for(i=

0;iedgenum;i++

)printf

("\n-----------------------------------\n");

}void

sort

(edgegraph *e)}}

}int

locatevex

(edgegraph *e,vertextype v)

//查詢元素v在一維陣列 vertex 中的下標,並返回下標

}printf

("no such vertex!\n");

return-1

;}intfindroot

(int t,

int parent)

//t接收到是結點在vertex陣列中的下標

return t;

//將找到的根節點返回,若沒有根節點返回自身

}void

minispantree_kruskal

(edgegraph *e)

printf

("\n 最小生成樹(kruskal):\n\n");

1.部分文圖來自 懶貓老師

kruskal 最小生成樹

include include 產生隨機數組用 include 同上 include using namespace std 1 帶權邊的類myarc class myarc bool operator const myarc arc myarc myarc int beginvex,int end...

最小生成樹Kruskal

最小生成樹有兩個特點,乙個是保證了所有邊的和是最小值,另乙個是保證了所有邊中的最大值最小。struct edge bool friend operator edge a,edge b 構邊 vectoredge int id max int mini void initial void input ...

最小生成樹(kruskal)

kruskal演算法 1 記graph中有v個頂點,e個邊 2 新建圖graphnew,graphnew中擁有原圖中相同的e個頂點,但沒有邊 3 將原圖graph中所有e個邊按權值從小到大排序 4 迴圈 從權值最小的邊開始遍歷每條邊 直至圖graph中所有的節點都在同乙個連通分量中 if 這條邊連線...