最小生成樹之Prime法

2021-12-29 22:32:47 字數 850 閱讀 9773

其基本思想為:從乙個頂點出發,選擇由該頂點出發的最小權值邊,並將該邊的另乙個頂點包含進來,然後找出由這兩個頂點出發的最小邊,依此類推,直至包含所有的頂點。如果期間構成環,就捨棄該邊,繼續尋找最小邊。下面以具體例項來說明演算法的過程:

具體的程式實現如下:

#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...