最小生成樹 Prim演算法

2021-09-18 08:05:27 字數 1635 閱讀 4886

最小生成樹——prim演算法

用鄰接矩陣存放整個圖的資訊(注意無向圖的對稱性),用乙個整型陣列on來存放已經加入的點,用乙個結構體陣列存放每個點的資訊,包括與之距離最短的點another,兩點的權值weigh,以及flag標記是否已被選取。

先將第乙個點放入on陣列中,每次放入的時候所有未選用的點資訊都需要更新(即比較上一次最短距離和與新點之間的距離大小,然後修改weigh和another),然後從中選取weigh最小的點,輸出其another與其自身,表示一條新的邊,然後將該點存入on陣列,其flag置為1,重複操作,直到點全部被選完

123

4567

891011

1213

1415

1617

1819

2021

2223

2425

2627

2829

3031

3233

3435

3637

3839

4041

4243

4445

4647

4849

5051

5253

5455

5657

5859

6061

6263

6465

6667

6869

7071

#include

#define max 0xfffffff

using

namespace

std;

typedef

struct

d d;

d dian[100];//存放點的資訊

int ok[100];//存放已連線點

intmap[100][100];

char str[100];

int n;

intchange

(char x)

}void

find

(int j)}}

intmain

()for(int i=0; i

for(int j=0; j

map[i][j]=max;

while(e--)

ok[0]=0;

dian[0].flag =1;//已拿

int top=0;

while(top

find(ok[top]);//更新剩餘點資訊

int min=max;

int p;

for(int i=0; i

if(dian[i].flag ==1)

continue;

if(dian[i].weigh

min=dian[i].weigh ;

p=i;}}

if(top-1)

cout

<

top++;

ok[top]=p;

dian[ok[top]].flag =1;

}return0;}

最小生成樹(prim演算法)

最小生成樹是資料結構中圖的一種重要應用,它的要求是從乙個帶權無向完全圖中選擇n 1條邊並使這個圖仍然連通 也即得到了一棵生成樹 同時還要考慮使樹的權最小。prim演算法要點 設圖g v,e 其生成樹的頂點集合為u。把v0放入u。在所有u u,v v u的邊 u,v e中找一條最小權值的邊,加入生成樹...

最小生成樹 Prim演算法

prim 演算法 以領接矩陣儲存 圖g bool b i 表示頂點i是否被訪問,初始化時候memset b,false,sizeof b b 0 value,表示從第0個節點開始。用value i 表示節點i到最小生成樹a中定點的最小距離。例如value 1 a 0 1 int sum記錄權值和 i...

最小生成樹 prim 演算法

一 演算法描述 假設存在連通帶權圖g v,e 其中最小生成樹為t,首先從圖中隨意選擇一點s屬於v作為起始點,並將其標記後加入集合u 中。然後演算法重複執行操作為在所有v屬於u,u屬於v u的邊 v0,u0 屬於e中找一條代價最小的邊並加入集合t,同時將u0併入u,直到u v為止。這是,t中必有n 1...