A 還是暢通工程(最小生成樹)

2022-03-07 14:13:54 字數 1480 閱讀 1184

點選開啟鏈結

某省調查鄉村交通狀況,得到的統計表中列出了任意兩村莊間的距離。省**「暢通工程」的目標是使全省任何兩個村莊間都可以實現公路交通(但不一定有直接的公路相連,只要能間接通過公路可達即可),並要求鋪設的公路總長度為最小。請計算最小的公路總長度。 

input測試輸入包含若干測試用例。每個測試用例的第1行給出村莊數目n ( < 100 );隨後的n(n-1)/2行對應村莊間的距離,每行給出一對正整數,分別是兩個村莊的編號,以及此兩村莊間的距離。為簡單起見,村莊從1到n編號。 

當n為0時,輸入結束,該用例不被處理。 

output對每個測試用例,在1行裡輸出最小的公路總長度。 

sample input

3

1 2 1

1 3 2

2 3 4

41 2 1

1 3 4

1 4 1

2 3 3

2 4 2

3 4 5

0

sample output

3

5

huge input, scanf is recommended.

隔了那麼長時間再來做這道題,還是犯了上次同樣的錯誤,初始化parent陣列

for(int i = 0; i <= n; i++)
這個地方一定是<=,一直不過真的很不爽,還是自己對**不熟悉。

ac**

#include#include

using

namespace

std;

int parent[105]; //

定義parent陣列用來判斷邊與邊是否形成環路

intsum;

struct

edge

edges[

5005

];bool

cmp(edge a, edge b)

int find(int

f)

returnf;}

//kruskal演算法生成最小生成樹

void minispantree_kruskal(int x, int

y)

for( i = 0; i < y; i++)

}printf(

"%d\n

", sum);

}int

main()

sort(edges, edges+ans, cmp);

minispantree_kruskal(t, ans);

}return0;

}

還有一種叫做prim演算法的也可以解這道題。

prim演算法

還是暢通工程 最小生成樹

題目描述 某省調查鄉村交通狀況,得到的統計表中列出了任意兩村莊間的距離。省 暢通工程 的目標是使全省任何兩個村莊間都可以實現公路交通 但不一定有直接的公路相連,只要能間接通過公路可達即可 並要求鋪設的公路總長度為最小。請計算最小的公路總長度。輸入 測試輸入包含若干測試用例。每個測試用例的第1行給出村...

還是暢通工程(最小生成樹模板題)

思路 按村莊間的距離從小到大排序,選擇構成最小生成樹 1.prim演算法 本題的資料村莊 即頂點的個數 不是很大,故可直接遍歷,若資料很大時,就需要用堆來維護每個頂點的當前最短距離 265 ms 1608 kb include includeusing namespace std define in...

還是暢通工程 最小生成樹 Prim演算法

includeusing namespace std 測試輸入包含若干測試用例。每個測試用例的第1行給出村莊數目n 100 隨後的n n 1 2行對應村莊間的距離,每行給出一對正整數,分別是兩個村莊的編號,以及此兩村莊間的距離。為簡單起見,村莊從1到n編號。當n為0時,輸入結束,該用例不被處理。in...