基本思想:(加點)
設g=(v, e)是具有n個頂點的連通網,
t=(u, te)是g的最小生成樹,
t的初始狀態為u=(u0∈v),te=,
重複執行下述操作:
在所有u∈u,v∈v-u的邊中找一條代價最小的邊(u, v)併入集合te,同時v併入u,直至u=v。
偽**:
演算法:prim
輸入:無向連通網g=
(v,e)
輸出:最小生成樹t=
(u,te)
1. 初始化兩個輔助陣列lowcost=arc[0]
[i]和adjvex=0(
0是始點);
2. 輸出頂點u0,將頂點u0加入集合u中;
3. 重複執行下列操作n-
1次 3.1 在lowcost中選取最短邊(lowcost[k]
),取對應的頂點序號k;
3.2 輸出頂點k和對應的權值;
3.3 將頂點k加入集合u中(lowcost[k]
=0);
3.4 調整陣列lowcost和adjvex;
**實現:
#include
using
namespace std;
const
int max=10;
//圖中最多頂點個數
int visited[max]=;
//全域性陣列變數visited初始化
class
mgraph
;//析構函式為空
void
dft(
int v)
;//深度優先遍歷
void
bft(
int v)
;//廣度優先遍歷
void
prim
(int v)
;//prim演算法找最小生成樹};
//無權值圖的建構函式
/*mgraph::mgraph(char a,int n,int e)
}*///有權值圖的建構函式
/*mgraph::mgraph(char a,int n,int e)
}*/mgraph::
mgraph
(char a,
int n,
int e)}}
int mgraph::
minedge
(int r,
int n)
}return j;
}void mgraph::
dft(
int v)
void mgraph::
bft(
int v)}}
void mgraph::
prim
(int v)
//從頂點v出發
lowcost[v]=0
;//將頂點v加入到集合
for(k=
1;k)//迭代n-1次}}
/*int main()
; mgraph mg(ch,6,9);
for(i=0;iint
main()
資料結構 prim演算法簡析
普里姆 prim 演算法 define m 6 define max 100 include include int cost m m int lowcost m adjvex m s m 其中lowcost陣列是選中定點到圖中頂點的最小權值 adjvex陣列存放的是到各個頂點的前驅頂點的位置 s陣...
大話資料結構之Prim演算法
構造最小生成樹可以有多種演算法。其中多數演算法利用了最小生成樹的下列一種簡稱為mst的性質 假設n v,是乙個連通網,u是頂點集v的乙個非空子集。若 u,v 是一條具有最小權值邊的邊,其中u屬於u,v屬於v u,則必存在一顆包含 u,v 的最小生成樹。prim演算法的定義 假設n p,e 是連通網,...
《大話資料結構》之Prim演算法
prim演算法作用是構造連通網的最小代價生成樹。演算法思想 以任意乙個點開始,找權值最小的一條邊,將此邊和兩個頂點加入最小生成樹集合,以最小生成樹的點集合中的每乙個點為起點,找尋終點不在集合中的權值最小的邊,並將結果加入集合,重複這個操作,直至所有的點都已經加入集合。圖的鄰接矩陣表示 typedef...