求網的最小生成樹(MST)的Kruskal演算法

2021-10-12 03:50:08 字數 1167 閱讀 4037

c++求網的最小生成樹(mst)的kruskal演算法**如下:

#include 

const

int n =

1000

;//用n表示無窮大

using namespace std;

intkruskal

(int adjacencymatrix,

int n,

int startpos)

//自定義kruskal演算法函式

/*adjacencymatrix表示鄰接矩陣;n表示頂點總數;startpos表示初始頂點編號*/

for(i =

0; i < n; i++)if

(i != pos1 && min > adjacencymatrix[pos1 * n + i]

) msw += min;

visited[pos1]=1

; visited[pos2]=1

; connected[pos1 * n + pos2]=1

; connected[pos2 * n + pos1]=1

; cout <<

"連線方案如下(格式:頂點1 頂點2 : 對應權值):"

<< endl;

while(1

)if(visited[pos1]==1

&& visited[pos2]==1

)}else

return msw;

//結束的標誌為當前兩頂點均已訪問且已有連線關係

}else

if(visited[pos1]==1

)}else

if(visited[pos2]==1

)}else}}

intmain()

;int n =

6, startpos =0;

int msw =

kruskal

(adjacencymatrix, n, startpos)

; cout <<

"最小權值和為: "

<< msw;

return0;

}

輸出示例如下:

最小生成樹(MST)

在帶權圖中,所有的生成樹中邊權的和最小的那棵 或幾棵 被稱為最小生成樹。幾點注意 求最小生成樹使用kruskal演算法。使用並查集處理節點的集合屬性,初始時所有結點屬於只包含其自身的孤立集合。實現 include include using namespace std define n 101 in...

最小生成樹 MST

1 prim演算法 對點進行貪心操作。適合稠密圖 const int m 1005 int vis m 表示該i點是否被選擇 vis i 0 還未被選擇 int map m m map i j 表示i到j的距離 int dis m 1到i的距離和 void prim cout sum 2 krusk...

最小生成樹MST

最小生成樹是在一張無向連通圖中,找到一棵樹,使得其邊的代價之和最小。注 可能存在多個最小生成樹。以邊為展開,將圖中的最小代價邊嘗試加入集合tree中,並且該邊不能與集合tree中的邊形成環,如此迭代,最終得到的集合tree為mst。因此可以採用並集查的方式實現kruskal演算法 以點為展開,將圖中...