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演算法 以點為展開,將圖中...