資料結構考試最小生成樹

2021-10-01 15:21:04 字數 1740 閱讀 4337

題目描述

根據輸入建立無向網。分別用prim演算法和kruskal演算法構建最小生成樹。(假設:輸入資料的最小生成樹唯一。)

輸入頂點數n

n個頂點

邊數mm條邊資訊,格式為:頂點1 頂點2 權值

prim演算法的起點v

輸出輸出最小生成樹的權值之和

對兩種演算法,按樹的生長順序,輸出邊資訊(kruskal中邊頂點按陣列序號公升序輸出)

樣例輸入

6v1 v2 v3 v4 v5 v6

10v1 v2 6

v1 v3 1

v1 v4 5

v2 v3 5

v2 v5 3

v3 v4 5

v3 v5 6

v3 v6 4

v4 v6 2

v5 v6 6

v1樣例輸出

15prim:

v1 v3 1

v3 v6 4

v6 v4 2

v3 v2 5

v2 v5 3

kruskal:

v1 v3 1

v4 v6 2

v2 v5 3

v3 v6 4

v2 v3 5

#include

#include

#include

#include

using namespace std;

const

int maxn =

105;

const

int inf =

0x3f3f3f3f

;int graph[maxn]

[maxn]

;int pre[maxn]

;int dis[maxn]

;bool vis[maxn]

;int from[maxn]

;int n;

mapint> name;

intfind

(int x)

void

combine

(int x,

int y)

string getname

(int i)

void

init()

}void

prim

(int s)

cout << sum << endl;

cout <<

"prim:"

<< endl;

cout << ss.

str();

}void

kruskal()

};priority_queue pq;

for(

int i =

0; i < n; i++

)for

(int j = i; j < n; j++)if

(graph[i]

[j]!= inf)

pq.push

(node);

while

(!pq.

empty()

)}}int

main()

int m;

cin >> m;

for(

int i =

0; i < m; i++

)

string s;

cin >> s;

prim

(name[s]);

kruskal()

;}

資料結構 最小生成樹

生成樹 乙個連通圖的最小連通子圖稱作該圖的生成樹。有n個結點的連通圖的生成樹有n個結點和n 1條邊。乙個有n個結點的連通圖的生成樹是原圖的極小連通子圖,它包含原圖中的所有n個結點,並且有保持圖連通的最少的邊。由生成樹的定義可知 若在生成樹中刪除一條邊,就會使該生成樹因變成非連通圖而不再滿足生成樹的定...

資料結構(最小生成樹)

對於乙個無相連通網,他的所有生成樹中必有一棵邊的權值總和最小的生成樹,稱之為最小代價生成樹,簡稱最小生成樹。最小生成樹必須滿足三個條件 1 構造的最小生成樹必須包括n個頂點 2 構造的最小生成樹有且僅有n 1條邊 3 構造的最小生成樹中不存在迴路。普利姆演算法 prim 假設g v,e 為一無向連通...

資料結構 最小生成樹

對於乙個圖連通圖g,n個點,e條邊,最小生成樹就是n 1條邊圖的生成子圖,且這n 1條邊的權值和最小。對於乙個圖的兩種演算法 prim演算法和kruskal演算法,這兩種演算法都是基於貪心思想的。偽 實現 輔助變數 lowcost陣列,儲存當前可連通的其他節點的最小權值。cnt 0表示當前樹連線節點...