給定乙個包含n個頂點的正權無向圖,編號為0至n-1。請編寫程式求出其最小支撐樹,並計算其代價。
輸入包含多組資料。每組資料第一行為2個整數n和e,均不超過200,分別表示圖的頂點數和邊數。接下來e行表示每條邊的資訊,每行為3個非負整數a、b、c,其中a和b表示該邊的端點編號,c表示權值。各邊並非按端點編號順序排列。
對於每組資料,若存在最小支撐樹則輸出乙個整數,為最小支撐樹各邊權值之和;若不存在最小支撐樹,則輸出「there is no minimum spanning tree.」。
450
1103
1135
1212
3842
0112
38
3
there is no minimum spanning tree.
找最小生成樹的過程裡用到了克魯斯卡爾法,至於是否有最小生成樹的判斷,就是判斷這個圖是不是個連通圖,只要連通子塊的個數為1,它就能找到最小生成樹;
敲好了之後沒考慮好結束迴圈的條件,還以為是找不到樹就break結束,於是寫的是while(1),但是一直是0分過不去;之後寫成while(cin >> n >> e),一下就過了
#
include
using
namespace std;
int f[
210]
;struct
tree
;bool
cmp(
struct
tree node1,
struct
tree node2)
intfind
(int x)
void
merge
(int x,
int y)
intmain()
;//flag陣列:生成樹時,若該點被選過了就令它的值為1
int a,b,c;
for(
int i =
0;i < n;i++
)for
(int i =
0;i < e;i++
)int num =0;
for(
int i =
0;i < n;i++)if
(num==1)
else
} cout << cnt << endl;
}else
}}
演算法與資料結構 最小生成樹(最小支撐樹)
概念 設g v,e 是乙個無向連通圖,生成樹上各邊的權值之和為該生成樹的代價,在g的所有生成樹中,代價最小的生成樹就稱為最小支撐樹,或稱最小生成樹。區別 最小生成樹是各邊權值和最小的數 最優歸併樹是帶權外部路徑長度最短的樹 演算法 kruskal演算法 prim演算法 來自 1 include 2 ...
樹的最小支配集
最小支配集,就是圖中用最少的點覆蓋其它所有點 如果用選a點覆蓋,則與a點相連的點都被覆蓋,大致 就是這樣 有乙個圖g,現在希望在一些點建立控制站,每個控制站能控制與它相臨的點 直接相連 現在希望有選擇的在一些點建立控制站,使得以最小得控制站數,控制所有的點 圖的最小支配集是np 問題,我只會樹的最小...
7 5 矩陣運算 (10 分)
7 5 矩陣運算 10 分 給定乙個n n的方陣,本題要求計算該矩陣除副對角線 最後一列和最後一行以外的所有元素之和。副對角線為從矩陣的右上角至左下角的連線。輸入格式 輸入第一行給出正整數n 1輸出格式 在一行中給出該矩陣除副對角線 最後一列和最後一行以外的所有元素之和。輸入樣例 42 3 4 1 ...