**
1. 鄰接矩陣儲存
[cpp]view plain
copy
//圖的鄰接矩陣儲存表示
#define infinity int_max
#define max_vertex_num 20
typedef
enum
graphkind;
//typedef
enum
status;
typedef
struct
arccellarccell, adjmatrix;
typedef
struct
mgraph;
bool
visited[max_vertex_num];
//設訪問標誌陣列,供遍歷時使用
[cpp]view plain
copy
//prim演算法-記錄從頂點集u到v-u的代價最小的邊的輔助陣列定義
struct
closedge[max_vertex_num];
2. prim演算法
[cpp]view plain
copy
void
minispantree_prim(mgraph g,
intu)
closedge[max_vertex_num];
inti,j,k;
for(j=0; j//輔助陣列初始化
if(j!=u)
closedge[u].lowcost = 0; //初始化u=
for(i=0; i
//if
if(k <0)
return
; cout<"——"
<" : "
closedge[k].lowcost = 0; //第k頂點併入u集
for(j=0; j
if(g.arcs[k][j].adj < closedge[j].lowcost)
//新頂點併入u後,重新選擇最小邊
} }//minispantree_prim
3. 構造乙個測試用的無向網
[cpp]view plain
copy
void
createudntest(mgraph &g)
, , ,
, , , , ,
,
};
g.kind = udn;
g.vexnum = 6;
g.arcnum = 10;
for
(i=0; i//構造頂點向量
g.vexs[i] = i;
for
(i=0; i//初始化為全int_max
for
(j=0; j
for
(i=0; i//對存在的邊賦值
g.arcs[a[i][0]][a[i][1]].adj = g.arcs[a[i][1]][a[i][0]].adj = a[i][2];
}
4.主函式
[cpp]view plain
copy
intmain()
最小生成樹 普里姆演算法 Prim
最小生成樹 的7到12行先初始化了矩陣第一行的值,本來很奇怪,那其他行的值怎麼辦?看到最後的28 35行才知道,原來從下面開始會逐步初始化與上個頂點相關的邊的值,最後能夠把全部都初始化了。截圖如下 演算法定義 1 輸入 乙個加權連通圖,其中頂點集合為v,邊集合為e 2 初始化 v new 其中x為集...
最小生成樹之Prim(普里姆)演算法
關於什麼是prim 普里姆演算法 在實際生活中,我們經常碰到類似這樣的一類問題 假設要在n個城市之間建立通訊聯絡網,則連通n個城市只需要n 1條線路。這時,我們需要考慮這樣乙個問題,如何在最節省經費前提 下建立這個通訊網.換句話說,我們需要在這n個城市中找出乙個包含所有城市的連通子圖,使得 其所有邊...
最小生成樹之普里姆 Prim 演算法
prim 演算法是一種貪心演算法 適合稠密圖 設g v,e 是無向連通帶權圖,v 設最小生成樹 t u,e 演算法結束時 u v,e e。貪心選擇的思想是 每次對於還未加入到 u 中 即 v u 中 所有點頂,從這些頂點中選擇乙個頂點,選擇的標準是,它距離 u 最近 和 u 中某個頂點的權值最小 將...