最小生成樹之Prim

2022-04-07 09:26:45 字數 1641 閱讀 1679

a:生成樹

b:未被訪問過的點的集合

pre[i]:生成樹中i的前驅節點。

a中的dis[i]:生成樹中包含點i的邊的長度。

b中的dis[i]: i到a的最短距離

vis:標記是否遍歷過(是否屬於a)

prim演算法的思想

1.任選一點,不妨選擇第乙個點,加入生成樹a。

2.遍歷b,尋找一點u,使其到a的距離最小(就是a中也找了一點v)。新增u到a中(vis)。記錄這條邊及其權值(pre,dis)。

3.更新與u相連的點的dis和pre

4.迴圈直到遍歷所有可達的點。

view code

#include #include 

using

namespace

std;

#define max 100

void prim(int n, int map[max][max], int dis[max], int

pre[max])

visit[

1] = true

;

dis[

1] = 0

;

//迴圈n-1次,每次加入乙個點

for (int i = 1; i < n; ++i)

}//找不到

if (next == 0)return

;

//加入生成樹

visit[next] = true

;

//更新與k相鄰的頂點。

for (int j = 2; j <= n; j++)}}

}

基本的最小生成樹題目。

view code

/*

【題目**】

最小生成樹。

【題目分析】

給定鄰接矩陣,求最小生成樹的最長邊。

【思路分析】

prim演算法。

*/#include

#include

#include

#include

#include

using

namespace

std;

#define max 502

intmap[max][max], dis[max], pre[max];

bool prim(int

n)

vis[

1] = true

;

dis[

1] = 0

;

//迴圈n-1次

for (int i = 1; i < n; ++i)

}//找不到

if (k == 0) return

false

;

//加入生成樹

vis[k] = true

;

//更新其他各點

for (int j = 1; j <= n; ++j)}}

}int

main()

}prim(n);

cout

<< *max_element(dis, dis+n+1) <}}

最小生成樹 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 ...