最優佈線問題 克魯斯卡爾 最小生成樹

2021-10-01 15:02:20 字數 2160 閱讀 1892

time limit:10000ms memory limit:65536k

total submit:274 accepted:178

case time limit:1000ms

description

學校有n臺計算機,為了方便資料傳輸,現要將它們用資料線連線起來。兩台計算機被連線是指它們之間有資料線連線。由於計算機所處的位置不同,因此不同的兩台計算機的連線費用往往是不同的。

當然,如果將任意兩台計算機都用資料線連線,費用將是相當龐大的。為了節省費用,我們採用資料的間接傳輸手段,即一台計算機可以間接的通過若干臺計算機(作為中轉)來實現與另一台計算機的連線。

現在由你負責連線這些計算機,你的任務是使任意兩台計算機都連通(不管是直接的或間接的)。

input

輸入檔案wir

e.in

wire.in

wire.i

n,第一行為整數 nnn(

2<=n

<

=100

)(2<=n<=100)

(2<=n

<=1

00),表示計算機的數目。此後的n

nn行,每行n

nn個整數。第x+1

x+1x+

1行yy

y列的整數表示直接連線第x

xx臺計算機和第y

yy臺計算機的費用。

output

輸出檔案wir

e.ou

twire.out

wire.o

ut,乙個整數,表示最小的連線費用。

sample input

30 1 2

1 0 1

2 1 0

sample output

2(注:表示連線1和2,2和3,費用為2)

hint

f il

lcha

rfillchar

fillch

ar( f,

size

of(f

),(f,sizeof(f),

(f,siz

eof(

f),$7f)

7f)7f

) 把所有值賦值為最大

演算法分析:每個頂點自成乙個連通分量。每個頂點自成乙個連通分量。在e中選擇代價最小的邊,若該邊依附的頂點落在t中不同的連通分量上,則將此邊加入到t中,否則捨去此邊而選擇下一條代價最小的邊。依此類推,直至t中所有頂點都在同一連通分量上為止。

**走起————

看,是不是很清晰明了 (๑′

ᴗ‵๑)

ilᵒᵛ

ᵉᵧₒᵤ

❤(๑′ᴗ‵๑)i lᵒᵛᵉᵧₒᵤ❤

(๑′ᴗ‵๑

)ilᵒ

ᵛᵉᵧₒ

ᵤ❤我相信你已經懂了

好吧,**走起。。。。

#include

#include

#include

using namespace std;

const int inf

=0x7fffffff

;int n,a[

200]

[200

],v[

200]

,ans,k,minn,p,q;

//v[i]表示連通分量

int main()

for(int i=

1;i<=n-

1;i++

)//要找n-1條邊}}

ans+=minn;

int p1,q1;

p1=v[p]

; q1=v[q]

;for

(int t=

1;t<=n;t++

)//把與點q相連的及它本身全部賦為v[p]

} cout<

}

最小生成樹 克魯斯卡爾演算法

c node.h檔案 儲存頂點資訊 class c node c node c node c node p node c node c node c node c node char p data node.h檔案,儲存邊資訊 include class link node link node li...

最小生成樹( 克魯斯卡爾演算法)

name author date 01 12 14 20 17 description 最小生成樹 克魯斯卡爾演算法 關於並查集的演算法,參見 一種簡單而有趣的資料結構 並查集 include include define maxn 1000 最大頂點數量 define max 20000 最大邊數...

克魯斯卡爾 最小生成樹集錦

狀態是1的兩個分量直接聯通,然後套模板。include include include include include include include include include include using namespace std define maxn 1e 9 int pa 10000 ...