HDU 1875 最小生成樹prim演算法

2022-05-15 21:48:20 字數 1306 閱讀 9704

1 #include2 #include3 #include4 #include5 #include6

#define max 0xffffffff //

定義乙個最小生成樹中不可能達到的值

7const

int qq=100+10; //

點的上限

8using

namespace

std;

9struct

pointnode[qq];

12double lowcost[qq][qq]; //

鄰接矩陣

13int vis[qq]; //

最小生成樹的點集合vis陣列

14int

n;15

double

f(point a,point b)

1619

void

build()

2030}31

void

prim()

3243}44

if(min==max) break; //

如果最小權值都為max 也就是不連通也可以跳出迴圈了、

45 vis[k]=0; //

點k進入最小生成樹陣列、

46 tot+=min; //

統計權值、

47for(int i=1;i//

因為加入了乙個點到最小生成樹中,所以要更新當前的最小權值陣列、

48if(vis[i]!=0&&lowcost[k][i]0

][i])

49 lowcost[0][i]=lowcost[k][i];50}

51if(t==0) printf("

%.1f\n

",tot*100

);52

else printf("

oh!\n");

53}54int

main()

5565 }

剛做這題我模型沒轉換過來,以為只要把橫座標按從小到大排序,橫座標相同就按縱座標從小到大排序然後然後從左到右從下道上連線各點就是最小生成樹、

- - 、 錯的太離譜了,**就不拿出來丟臉了

題目設定的限制條件實際上就是不連通,這點想通了就好做了

hdu 1875暢通工程再續(最小生成樹)

思路簡單,最小生成樹,用prim或者kruskal都可以實現,我就用的是kruskal。但杯具的是開始一直理解錯誤,wa的慘不忍睹,所以儘管題很水,我也發篇文,希望可以給後來人有點幫助 題目中的這句話很重要 決定在符合條件的小島間建上橋,所謂符合條件,就是2個小島之間的距離不能小於10公尺,也不能大...

HDU1875 暢通工程再續 最小生成樹

題意 在這些小島中建設最小花費的橋,但是一座橋的距離必須在10 1000之間。思路 用最小生成樹解決吧,就那兩個演算法。prim include include include include using namespace std define n 105 define inf 0x3f3f3f3...

最小生成樹 kruskal和簡單介紹prim

最小生成樹,建立在並查集結構上的資料處理方法之一,目的是找到一條最短的路徑聯通圖中每乙個點。kruskal比較好理解的地方在於,這是乙個貪心思想實現的 它是將邊按權值排序,每次從剩下的邊集中選擇權值最小且兩個端點不在同一集合的邊加入生成樹中,反覆操作,直到加入了n 1條邊。很簡單的思路,實現起來比較...