hiho最小生成樹一(prim)演算法

2021-07-31 11:34:00 字數 1016 閱讀 6423

題目:

時間限制:

10000ms

單點時限:

1000ms

記憶體限制:

256mb

描述但是,問題也接踵而來——小hi現在手上擁有n座城市,且已知這n座城市中任意兩座城市之間建造道路所需要的費用,小hi希望知道,最少花費多少就可以使得任意兩座城市都可以通過所建造的道路互相到達(假設有a、b、c三座城市,只需要在ab之間和bc之間建造道路,那麼ac之間也是可以通過這兩條道路連通的)。

輸入每個測試點(輸入檔案)有且僅有一組測試資料。

在一組測試資料中:

第1行為1個整數n,表示小hi擁有的城市數量。

接下來的n行,為乙個n*n的矩陣a,描述任意兩座城市之間建造道路所需要的費用,其中第i行第j個數為aij,表示第i座城市和第j座城市之間建造道路所需要的費用。

對於100%的資料,滿足n<=10^3,對於任意i,滿足aii=0,對於任意i, j滿足aij=aji, 0輸出

對於每組測試資料,輸出1個整數ans,表示為了使任意兩座城市都可以通過所建造的道路互相到達至少需要的建造費用。

樣例輸入

5

0 1005 6963 392 1182

1005 0 1599 4213 1451

6963 1599 0 9780 2789

392 4213 9780 0 5236

1182 1451 2789 5236 0

樣例輸出

4178

題解;

將給出的路的權值用二維陣列存起來,然後從第乙個點開始找,用prim演算法的思想乙個點乙個點的加入,更新最短路。

**:#include#define inf 0x7fffffff

#define m 2000

using namespace std;

int n,a[m][m];

int vis[m],cos[m];

int min_length(int n)

cout<

最小生成樹 Prim

include stdio.h include stdlib.h include io.h include math.h include time.h define ok 1 define error 0 define true 1 define false 0 define maxedge 20 ...

最小生成樹 prim

演算法模型 由任意乙個頂點開始 將此頂點存入s集,剩餘頂點存入t集合 每次遍歷頂點,取一條能夠連線s與t最短邊e,直到所有頂點全部加入s include include define inf 1 30 int n,m,vis 110 low 110 int map 110 110 int init ...

最小生成樹 PRIM

這個是有關普利姆的演算法,從乙個點出發,找出與這個點相連的所有點的對應的權值最小的那個,然後再把這個點從集合中劃掉。模板如下 include include define inf 0xfffff define max 2005 using namespace std int map max max ...