其基本思想為:從乙個頂點出發,選擇由該頂點出發的最小權值邊,並將該邊的另乙個頂點包含進來,然後找出由這兩個頂點出發的最小邊,依此類推,直至包含所有的頂點。如果期間構成環,就捨棄該邊,繼續尋找最小邊。下面以具體例項來說明演算法的過程:
具體的程式實現如下:
#include
#define n 6 //頂點數
#define max 10000
typedef struct
edge;
int flag[n]=;//標誌頂點是否被選定
int flag1=0;//記錄邊的終點
int flag2=0;//記錄邊的起點
void prime(int i,int dist[n][n],edge t[n-1])
{ int j,k,min;
int num=0;
flag[i]=1;//包含頂點置為1
while(num<5)//6個頂點則有5條邊
{ min=max;
for(j=0;j
執行結果如下:
注意最小生成樹不是唯一的,但是總權值是一樣的。
注:如果程式出錯,可能是使用的開發平台版本不同,如下鏈結: 解釋說明
演算法導論 最小生成樹之Prime法
關於最小生成樹的概念,在前一篇文章中已經講到,就不在贅述了。下面介紹prime演算法 其基本思想為 從乙個頂點出發,選擇由該頂點出發的最小權值邊,並將該邊的另乙個頂點包含進來,然後找出由這兩個頂點出發的最小邊,依此類推,直至包含所有的頂點。如果期間構成環,就捨棄該邊,繼續尋找最小邊。下面以具體例項來...
最小生成樹 prime
include stdio.h define max 10 define inf 999 typedef struct mgraph mgraph int lowest max lowest vi 表示當前生成樹這一整體到其餘頂點的權值 int cloest max cloest vi 儲存v s中...
最小生成樹之prime演算法
在這裡我就不擺最小生成樹的定義了,對於最小生成樹,我們必須注意一下兩點 1 盡可能選取權值小的邊,但不能構成迴路。2 選取合適的n 1條邊將聯通圖的n個頂點連線起來。演算法簡單描述 1 輸入 乙個帶權連通圖,其中頂點集合為v,邊集合為e 2 初始化 vnew 其中x為集合v中的任一節點 起始點 en...