Kruskal演算法 最小生成樹

2021-10-02 23:12:29 字數 2427 閱讀 9710

//輔助陣列

typedef struct

edge[mvnum],edge;

int vexset[mvnum]

;//標識各個頂點所屬的連通分量

//輔助陣列

圖例

執行結果

實現**

(鄰接矩陣和鄰接表分別實現)

#include

#include

using namespace std;

#define ok 1

#define error 0

#define maxint 32767 //表示無窮大

#define mvnum 100 //最大頂點數

//鄰接矩陣的結構

typedef struct

amgraph;

//鄰接矩陣的結構

//鄰接表的結構

typedef struct arcnode arcnode;

typedef struct vnode, adjlist[mvnum];

typedef struct//鄰接表

algraph;

//鄰接表的結構

int locate(algraph g, string v)//locate過載 }

return -1;}

//輔助陣列

typedef struct

edge[mvnum],edge;

int vexset[mvnum]

;//標識各個頂點所屬的連通分量

//輔助陣列

edge edge;

//查詢結點位置

int locate(amgraph g, string v)

}return -1;

} //查詢結點位置

//建立鄰接矩陣

int createudn(amgraph& g)//無向圖的構造

for(int i = 0; i < g.vexnum; i++)//初始化邊的權值為maxint }

cout <<

"各邊的頂點資訊和權值:"

;for

(int k = 0; k < g.arcnum; k++)//構造鄰接矩陣 ;

int i = locate(g, v1)

;//找到點的位置

int j = locate(g, v2)

; g.arcs[i]

[j]= w;//賦予權值

g.arcs[j]

[i]= g.arcs[i]

[j];

}return ok;

} //建立鄰接矩陣

//建立鄰接表

int createudg(algraph& g)

cout <<

"請輸入各邊的兩頂點資訊和權值:"

;for

(int k = 0; k < g.arcnum; k++)

; int i = locate(g, v1)

; int j = locate(g, v2)

; arcnode* p1 = new arcnode;

p1->info = weight;

p1->adjvex = j;

p1->nextarc = g.vertices[i].firstarc;

g.vertices[i].firstarc = p1;

arcnode* p2 = new arcnode;

p2->info = weight;

p2->adjvex = i;

p2->nextarc = g.vertices[j].firstarc;

g.vertices[j].firstarc = p2;

}return ok;

} //建立鄰接表

void sort(edge &edge,int len)}}

} //kruskal最小生成樹

void minispantree_kruskal(amgraph g)

for(int i = 0; i < g.arcnum; i++)}}

}}//kruskal最小生成樹

//kruskal最小生成樹

void minispantree_kruskal(algraph g)

for(int i = 0; i < g.arcnum; i++)}}

}}int main(

)

最小生成樹 kruskal(演算法)

最小生成樹 圖中有好多點呀 n個 讓我們找到n 1條邊,來把他們連上吧,但是要讓這n 1條邊的和最小。kruskal演算法 把所有邊由公升序排列,然後從最小的一條邊找起,如果這條邊的兩點不屬於乙個集合 此處運用並查集 那麼就要這條邊,否則,忽略這條邊吧 一直這樣找下去,直到找了n 1條邊為止,此時,...

最小生成樹 Kruskal演算法

1.概覽 kruskal演算法是一種用來尋找最小生成樹的演算法,由joseph kruskal在1956年發表。用來解決同樣問題的還有prim演算法和boruvka演算法等。三種演算法都是貪婪演算法的應用。和boruvka演算法不同的地方是,kruskal演算法在圖中存在相同權值的邊時也有效。2.演...

最小生成樹 kruskal演算法

2016.12.30 演算法思想 先將邊按照權值排序,從權值最小的邊開始列舉,如果當前邊連線的兩個點不屬於同一集合,就將這兩個點連起來 用到的資料結構是並查集 一直到列舉完所有的邊,此時生成的就是最小生成樹 include include include include using namespac...