演算法思想:
假設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 maxsize 10 //頂點最大個數
typedef string vertextype; //頂點型別
typedef int edgetype; //權值型別,有向圖(0,1),無向圖(權值,無窮大)
#define infinity 0x7fffffff
//0xffffffff賦值給有符號的整型變數,其結果為-1,因為:-2^31 + 2^0 + 2^1 + ... + 2^30 = -1
typedef struct
mgraph;
#define success 1
#define unsuccess 0
typedef int status;
//建立無向圖
status creategraph( mgraph& mg )
for ( int i = 0; i < mg.ivexnum; ++i ) }
cout << "請輸入由兩點構成的邊及其權值:";
for ( int i = 0; i < mg.iarcnum; ++i )
return success;
}//普里姆演算法求解最小生成樹
void minispantree_prim( const mgraph& g )
for ( int j = 1; j < g.ivexnum; ++j )
}cout << "(" << adjvex[k] << "," << k << ")";
lowcost[k] = 0; //將下標為k的頂點加入到最小生成樹中
//重新計算lowcost
for ( int i = 0; i < g.ivexnum; ++i )
} }
}int main()
資料結構 Prim演算法 最小生成樹
資料結構上機要求用prim演算法求最小生成樹。首先應該明白prim演算法思想,即在乙個網狀圖n v,中,假設m是圖n最小生成樹邊的集合。再設有u和v兩個點集合,從u u0 v m 開始,進入迴圈操作 找出從點集u到點集v u代價最小的邊 u0,v0 u0 u,v0 v u.並把邊併入邊集m中,v0也...
資料結構 prim演算法 最小生成樹
乙個有 n 個結點的連通圖的生成樹是原圖的極小連通子圖,且包含原圖中的所有 n 個結點,並且有保持圖連通的最少的邊。選擇乙個點作為起點 判斷連線每個節點的度 選擇最小的 每進乙個節點 標記已經來過 如果乙個節點所連線的節點都走過了 那麼就退一步 繼續尋找連線邊 選擇最小的 include defin...
資料結構5 最小生成樹Prim演算法
prim演算法是建立在貪心演算法的基礎上的演算法,主要思想就是每次都去找已訪問的頂點連向未訪問的頂點中最短的邊。演算法思路 1.u集合存放所有最短邊的起始點,lowcost存放待選邊 每次選擇最小邊都從lowcost中選出 2.初始先將u的值都設定為入口點start,將lowcost的待選邊都設定為...