最短網路 prim,kruskal演算法簡單應用

2021-10-09 11:58:09 字數 1594 閱讀 2821

農夫約翰被選為他們鎮的鎮長!

他其中乙個競選承諾就是在鎮上建立起網際網路,並連線到所有的農場。

約翰已經給他的農場安排了一條高速的網路線路,他想把這條線路共享給其他農場。

約翰的農場的編號是1,其他農場的編號是 2∼n。

為了使花費最少,他希望用於連線所有的農場的光纖總長度盡可能短。

你將得到乙份各農場之間連線距離的列表,你必須找出能連線所有農場並使所用光纖最短的方案。

輸入格式

第一行包含乙個整數 n,表示農場個數。

接下來 n 行,每行包含 n 個整數,輸入乙個對角線上全是0的對稱矩陣。

其中第 x+1 行 y 列的整數表示連線農場 x 和農場 y 所需要的光纖長度。

輸出格式

輸出乙個整數,表示所需的最小光纖長度。

資料範圍

3≤n≤100

每兩個農場間的距離均是非負整數且不超過100000。

輸入樣例:

40 4 9 21

4 0 8 17

9 8 0 16

21 17 16 0

輸出樣例:

28思路

最小生成樹模板題,主要主要記錄邊的方式 只需要記錄上三角或下三角邊的情況即可

#include

using

namespace std;

const

int n=

1e4+10;

//點的個數不大於100,邊的個數則不大於10000,

int n;

int s[

120]

[120

],f[n]

;struct kla[n]

;//記錄邊的資訊

intcmp

(kl x,kl y)

intfi

(int x)

intmain()

for(

int i=

1;i<=idx;i++

) f[i]

=i;sort

(a+1

,a+1

+idx,cmp)

;//kruskal演算法

int res=0;

for(

int i=

1;i<=idx;i++

) cout

}

#include

//prim

using

namespace std;

const

int n=

1e4+10;

int n;

int s[

120]

[120

],dist[n]

,st[n]

;int

main()

int res=

0,t;

memset

(dist,

0x3f

,sizeof dist)

;dist[1]

=0;for

(int i=

0;i) cout

}

AcWing 1140 最短網路

題目鏈結 給出n個點,並給出所有點之間的距離,本質就是求一張無向連通圖的最小生成樹 從題目來看,這題的資料是保證有解的,還有按照輸入格式來看,這應該是稠密圖,使用鄰接矩陣來儲存圖 直接套用prim演算法就行了 include include using namespace std const int...

COGS 831 最短網路

輸入檔案 agrinet.in輸出檔案 agrinet.out簡單對比 時間限制 1 s 記憶體限制 128 mb 農民約翰被選為他們鎮的鎮長!他其中乙個競選承諾就是在鎮上建立起網際網路,並連線到所有的場。當然,他需要你的幫助。約翰已經給他的農場安排了一條高速的網路線路,他想把這條線路共享給其他農場...

AcWing 1140 最短網路

農夫約翰被選為他們鎮的鎮長!他其中乙個競選承諾就是在鎮上建立起網際網路,並連線到所有的農場。約翰已經給他的農場安排了一條高速的網路線路,他想把這條線路共享給其他農場。約翰的農場的編號是1,其他農場的編號是 2 n.為了使花費最少,他希望用於連線所有的農場的光纖總長度盡可能短。你將得到乙份各農場之間連...