kruskal演算法求最小生成樹

2021-10-01 17:19:00 字數 1550 閱讀 1140

描述

要求對乙個圖使用kruskal演算法求最小生成樹,依次輸出選出的邊所關聯的頂點序列,要求下標較小者在前,如圖所示,其頂點序列為1 3 4 6 2 5 3 6 2 3

輸入若干行整數

第一行為兩個整數,分別為圖的頂點數和邊數

第二行開始是該圖的鄰接矩陣,主對角線統一用0表示,無直接路徑的兩點用100來表示(保證各邊權值小於100)

輸出若干用空格隔開的整數

樣例輸入

6 10

0 6 1 5 100 100

6 0 5 100 3 100

1 5 0 5 6 4

5 100 5 0 100 2

100 3 6 100 0 6

100 100 4 2 6 0

樣例輸出

1 3 4 6 2 5 3 6 2 3

kruskal演算法——加邊法

**中的變數意義:

struct edgetype

;int vertexnum,edgenum;

// 點,邊

edgetype edge[

520]

;// 邊集陣列

int ljb[

120]

[120];

// 鄰接陣列

// ljb[x][y] = z ,意味著點 x 到點 y 的權是 z;

edgegraph

(int n,

int m)

;// 建構函式

void

kruskal()

;// 重點函式

intfindroot

(int parent,

int s)

;

**區:
#include

#include

#include

using

namespace std;

struct edgetype

;class

edgegraph

;edgegraph::

edgegraph

(int n,

int m)

}// 對邊集陣列按權大小排序,從小到大;

for(

int i=

1; i<=k; i++

)for

(int j=

1; j<=k-

1; j++)}

kruskal()

;}int edgegraph::

findroot

(int parent,

int s)

void edgegraph::

kruskal()

}}intmain()

Kruskal演算法求最小生成樹

include include define max vex 100 typedef struct edge edge edgeset max vex 邊集陣列 edgnum max vex 1 int creat return edgnum 排序,使邊集陣列edgeset元素按權值遞增順序排列 v...

kruskal演算法求最小生成樹

kruskal演算法是一種使用貪心思路求解無向圖的最小生成樹的演算法。其大體思路為 將邊按權重排序,然後每次選出權最小且不使圖產生環的邊,作為樹的邊掛上樹。具體來講就是這麼兩個步驟 1.把邊按權重排序。2.依照1的順序遍歷邊 使用乙個並查集來判斷加進這條邊後圖中是否有環。如果沒有環,更新並查集,並把...

求最小生成樹 kruskal演算法

kruskal演算法 c 實現 輸入邊資訊 兩頂點及權重 按權重從小到大排序 找n 1條不構成迴路的最小邊 難點 判斷是否構成迴路 include using namespace std 邊結構體 typedef struct edge edge intmain 按照權重從小到大排序 for i 0...