prime演算法的精髓在於:
每次選取一條邊。
該邊滿足:1、一端已選,一端未選;2、該邊權值最小。
直到選取n-1條邊或選取n個頂點演算法結束,求出mst或者判斷出不存在mst。
**設計:
1、利用兩個集合存放已選頂點和未選頂點
(choosed存放已選頂點,unchoosed存放未選頂點)
2、每次選取的邊都是一端在choosed中,另一端在unchoosed中的權值最小的邊
3、利用stl中vector可以方便的實現圖的臨界表儲存
4、記錄組成mst的每條邊很方便,只要在選取到一條滿足條件的邊時記錄下起點、終點、權值即可
**:
#include#include#includeusing namespace std;
const int maxn=101; //頂點數
const int inf=0x7fffffff;
struct edge //邊
;int choosed[maxn]; //已選頂點
int unchoosed[maxn]; //未選頂點
int nodenum,edgenum,mst; //頂點數、邊數、最小生成樹
bool choose[maxn]; //頂點是否已選
vectormyv[maxn]; //圖的鄰接表
/* //這是無向圖有重複邊的建圖,取重複邊中最小的邊儲存
bool exist(int from,int to,int cost)}}
if(smallflag)
{for(int j=0;jto的邊已選,那麼從to->from的邊也已選
for(int k=0;k測試例項:
1、圖形:
2、輸入及結果:
問題:如何利用prime演算法求解有向圖的mst?
先留在這吧。。。
最小生成樹之prime演算法
在這裡我就不擺最小生成樹的定義了,對於最小生成樹,我們必須注意一下兩點 1 盡可能選取權值小的邊,但不能構成迴路。2 選取合適的n 1條邊將聯通圖的n個頂點連線起來。演算法簡單描述 1 輸入 乙個帶權連通圖,其中頂點集合為v,邊集合為e 2 初始化 vnew 其中x為集合v中的任一節點 起始點 en...
最小生成樹 Prime演算法
對於乙個圖,它的所有生成樹中必有乙個 邊的權值最小 的生成樹,我們把它稱為最小生成樹。概念很抽象,換做實際問題 有十個城市,各個城市之間距離或遠或近。需要建設乙個道路網,把十個城市連線在一起,要求道路網的道路長度最小。各個城市的連線可以抽象為乙個圖,本質上即是求該圖的乙個最小生成樹。每乙個圖可能有多...
最小生成樹 prime演算法
問題 c 建立通訊 時間限制 1 sec 記憶體限制 128 mb 提交 7 解決 4 提交 狀態 討論版 題目描述 據不完全統計,受 影響,四川大部分災區通訊陷入癱瘓,數千個基站因斷電 傳輸中斷等原因退出服務,目前總公司已緊急部署對受災地區進行通訊搶修。按照應急通訊保障預案,必須盡快 付出代價最小...