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