資料結構上機要求用prim演算法求最小生成樹。
首先應該明白prim演算法思想,即在乙個網狀圖n=(v,)中,假設m是圖n最小生成樹邊的集合。再設有u和v兩個點集合,從u=(u0∈v),m={}開始,進入迴圈操作:找出從點集u到點集v-u代價最小的邊(u0,v0)u0∈u,v0∈v-u.並把邊併入邊集m中,v0也併入點集u中,直到u=v為止。此時m一定要有n-1條邊(假設有n個頂點),min=(u,)即為n的最小生成樹。
該演算法用到了最小生成樹的乙個mst性質:假設n=(v,)是乙個連通網,u是點集v的乙個非空子集。若(u,v)是一條最小權值邊,其中u∈u,v∈v,則必存在一棵包含邊(u,v)的最小生成樹.
下面給出原始碼:
1 #include"iostream"2
using
namespace
std;34
#define max 1000
56 typedef struct
arccell
7arccell,adjmatrix[100][100];//
adj表示邊的權值大小
1112 typedef struct
13mgraph;//
以上均為用鄰矩陣的儲存結構定義圖
1819 typedef struct
pnode
20 closedge[100
];24
25 typedef struct
node
26 node,dgevalue[100
];31
32int locatevex(mgraph g,char
ch)33
40return
k;41}42
43int creatmatrix(mgraph &g,dgevalue &dgevalue)
44 58
}59 cout<<"
請輸入一條邊兩端的定點及其上權值
"<60for(k=0;k)
61
68return0;
69}7071
72int
minum(mgraph g,closedge close)
73 82}83
return
j;84}85
86void creatminitree_prim(mgraph g,char
u)87 99}
100 close[k].lowcost=0
;101
102103
104for(j=1;j)
105117
}118
}119
}120
121int
main()
122
第一次寫東西,希望有個好的開始,cheer up~!~ 2012-12-09
資料結構 最小生成樹(Prim演算法)
演算法思想 假設n p,是連通圖,te是n上最小生成樹中邊的集合。演算法從u u0 v 開始。重複執行下述操作 在所有u u,v v u的邊 u,v e中找一條代價最小的邊 u0,v0 併入集合te,同時v0併入u,直到u v為止。此時te中必有n 1條邊,則t v,為n的最小生成樹。define ...
資料結構 prim演算法 最小生成樹
乙個有 n 個結點的連通圖的生成樹是原圖的極小連通子圖,且包含原圖中的所有 n 個結點,並且有保持圖連通的最少的邊。選擇乙個點作為起點 判斷連線每個節點的度 選擇最小的 每進乙個節點 標記已經來過 如果乙個節點所連線的節點都走過了 那麼就退一步 繼續尋找連線邊 選擇最小的 include defin...
資料結構5 最小生成樹Prim演算法
prim演算法是建立在貪心演算法的基礎上的演算法,主要思想就是每次都去找已訪問的頂點連向未訪問的頂點中最短的邊。演算法思路 1.u集合存放所有最短邊的起始點,lowcost存放待選邊 每次選擇最小邊都從lowcost中選出 2.初始先將u的值都設定為入口點start,將lowcost的待選邊都設定為...