最小生成樹 基礎)杭電1233

2021-06-29 10:24:13 字數 808 閱讀 4818

這題是最小生成樹(

kruscal演算法),這也是我第一次接觸。

首先我來闡述一下 最小生成樹的過程及目的。

目的:要在n個

城市之間

鋪設光纜,主要目標是要使這n個城市的任意兩個之間都可以通訊,但鋪設光纜的費用很高,且各個城市之間鋪設光纜的費用不同;另乙個目標是要使鋪設光纜的總費用最低。這就需要找到帶權的最小生成樹。

好 到過程了。

1 先讓 取到的資料 按 花費 排序(最好用qsort)。

2 用並查集,檢視 該邊 是否 已經 被計算,如果有 跳過,沒有 就 用計算器 加上 所需要的 費用,和並上一些集合。

好 上**。

#include

#include

using namespace std;

struct info //儲存 書記 

s[5005];

int set[5005]; //並查集 

int find(int x)  

//查 

void uion(int x,int y)//並 

int cmp(const void *a,const void *b) //qsort cmp排序 

int main()

for(int i = 0;i <= k;i++)

set[i] = i;

qsort(s,k,sizeof(s[0]),cmp); //排序 

int sum = 0;

for(int i = 0;i < k;i++)

} printf("%d\n",sum); }

}

杭電 1233 還是暢通工程 (最小生成樹)

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

杭電1102 最小生成樹 並差集

kruskal 配並差集 模板題 include include include include using namespace std const int mx 105 儲存節點上級 int f mx 儲存兩節點之間的距離 struct node 計算兩個節點之間的距離 double length...

hdu 1233 最小生成樹kruskal

學完kruskal演算法,自己的理解就是也是乙個貪心的策略,記錄下每次的起點和終點,以及他們之間的權值,對邊的權值進行排序,每次找出權值比較小的邊,判斷他與之前所選擇的邊是否會形成迴路,如果不會的話就往生成樹中加入這一條邊,如果會就捨棄,如何判斷迴路,就需要用到並查集,找出起點和終點各自的根節點,如...