搭橋 CODEVS 1002 ,詳細注釋

2021-08-28 06:18:44 字數 1518 閱讀 5245

考查最小生成樹,這裡用kruskal演算法實現,裡面用到了並查集

#include

#include

#include

#include

using namespace std;

int n,m=0;

//行列數

char input[

2505];

//輸入的資料

struct bcj

//找爸爸的遞迴函式,不停去找,直到找到祖宗為止

intgetf

(int x)

else

}//合併兩個子集

intmerge

(int x,

int y)

return0;

}} b;

struct coord coo[

2505];

struct dist dis[

6250005];

//最多有2500個建築物,所以最多有2500*2500條邊

bool comp

(const dist &a,

const dist &b)

intmain()

if(input[i]

=='#'

) temp_y++

;//列++

if(temp_y==m+1)

}//開始計算建築物之間的距離

int pos=1;

for(

int i=

1; i<=n*m-

1; i++)if

(t1>

1&&t2>1)

if(t1<=

1&&t2>1)

if(t2<=

1&&t1>1)

pos++;}

}}}sort

(dis+

1,dis+pos,comp)

;//把所有邊根據w(長度)進行從小到大排序

b.init()

;//並查集初始化

int bridge_len=0;

//橋的總長度

int bridge_sum=0;

//橋的數目

int count=0;

//提前退出迴圈的標記

int t=0;

//遍歷所有邊,把符合條件的進行合併

for(

int i=

1; i}if

(count==temp_city-1)

break;}

//下面開始計算建築物數

b.init()

;//重新初始化

for(

int i=

1; ifor(

int i=

1; i<=n*m; i++)}

cout

" "<

return0;

}

codevs 1002 搭橋 題解報告

繼續我的刷題之路。題目描述 description 有一矩形區域的城市中建築了若干建築物,如果某兩個單元格有乙個點相聯絡,則它們屬於同一座建築物。現在想在這些建築物之間搭建一些橋梁,其中橋梁只能沿著矩形的方格的邊沿搭建,如下圖城市1有5棟建築物,可以搭建4座橋將建築物聯絡起來。城市2有兩座建築物,但...

codevs 3185 佇列練習1

題目描述 description 給定乙個佇列 初始為空 只有兩種操作入隊和出隊,現給出這些操作請輸出最終的隊頭元素。操作解釋 1表示入隊,2表示出隊 輸入描述 input description n 操作個數 n個操作 如果是入隊則後面還會有乙個入隊元素 具體見樣例 輸入保證隊空時不會出隊 輸出描...

codevs 3185 佇列練習1

題目描述 description 給定乙個佇列 初始為空 只有兩種操作入隊和出隊,現給出這些操作請輸出最終的隊頭元素。操作解釋 1表示入隊,2表示出隊 輸入描述 input description n 操作個數 n個操作 如果是入隊則後面還會有乙個入隊元素 具體見樣例 輸入保證隊空時不會出隊 輸出描...