最小生成樹的prim演算法實現

2021-07-03 11:05:25 字數 910 閱讀 5993

mst(minimum spanning tree,最小生成樹)問題有兩種通用的解法,prim演算法就是其中之一,它是從

點的方面

考慮構建一顆mst,大致思想是:設圖g頂點集合為u,首先任意選擇圖g中的一點作為起始點a,將該點加入集合v,再從集合u-v中找到另一點b使得點b到v中任意一點的權值最小,此時將b點也加入集合v;以此類推,現在的集合v=,再從集合u-v中找到另一點c使得點c到v中任意一點的權值

#includeusing namespace std;

#define max_size 10

#define inf 9999;

typedef char elemtype;

typedef struct graph

graph,*g;

int indexof(g &g,elemtype c) }

return -1;

}void create_graph(g &g)

else

} }cout<<"請輸入頂點數"<>g->vnum;

for(int i=1;i<=g->vnum;i++)

cout<<"請輸入總共有多少條邊"<>g->linenum;

for(int i=1;i<=g->linenum;i++)

//列印建立的矩陣

for(int i=1;i<=g->vnum;i++)

cout} isused[1]=1;

for(int i=2;i<=g->vnum;i++)

}} for(int i=1;i<=g->vnum;i++)

最小,此時將c點加入集合v,直至所有頂點全部被加入v,此時就構建出了一顆mst。因為有n個頂點,所以該mst就有n-1條邊,每一次向集合v中加入乙個點,就意味著找到一條mst的邊。

最小生成樹prim演算法實現

今天從志權師兄那裡學會了最小生成樹。所謂生成樹,就是n個點之間連成n 1條邊的圖形。而最小生成樹,就是權值 兩點間直線的值 之和的最小值。首先,要用二維陣列記錄點和權值。如上圖所示無向圖 int map 7 7 map 1 2 map 2 1 4 map 1 3 map 3 1 2 然後再求最小生成...

最小生成樹prim演算法實現

最小生成樹prim演算法實現 首先,要用二維陣列記錄點和權值。如上圖所示無向圖 int map 7 7 map 1 2 map 2 1 4 map 1 3 map 3 1 2 然後再求最小生成樹。具體方法是 1.先選取乙個點作起始點,然後選擇它鄰近的權值最小的點 如果有多個與其相連的相同最小權值的點...

最小生成樹的Prim演算法實現

其中 6105 節點個數 7035 邊數 0 id 1609 起始邊 1622 終邊 57.403187 權重 include stdafx.h include time.h include include include using namespace std static int nodenum...