#includeusing namespace std;
int main();//這裡對book陣列進行了初始化
int inf=99999999;
int count=0,sum=0;//count用來記錄生成樹中頂點的個數,sum用來儲存路徑之和
//讀入n和m,n表示頂點個數,m表示邊的條數
cout<<"請分別輸入原圖頂點個數n,邊的條數m:"<>n>>m;
//初始化
for(i=1;i<=n;i++)
else
e[i][j]=inf;
} }
//讀入邊
cout<<"請依次輸入m條邊,每條邊起點為b1,終點為b2,權重為z3。即b1->b2(z3):"<>b1>>b2>>z3;
//這裡是無向圖,所以需要將邊反向再儲存一遍
e[b1][b2]=z3;
e[b2][b1]=z3; }
//初始化dis陣列,這裡是1號頂點到其餘各個頂點的初始距離,因為當前生成樹中只有1號頂點
for(i=1;i<=n;i++)
//prim核心部分開始
//將1號頂點加入生成樹
book[1]=1;//這裡用book來標記乙個頂點是否已經加入生成樹
count++;
while(counte[j][k])
} }
cout<<"該圖的最小生成樹的邊的總長度之和最短為: "4、重複第三步,直到生成樹中有n個頂點為止。
5、該演算法時間複雜度為o(logm)。
*/
8 2 1再談最小生成樹 用堆
includeusing namespace std int dis 7 book 7 book陣列用來記錄哪些頂點已經放入生成樹中 int h 7 pos 7 size h用來儲存堆,pos用來儲存每個頂點在堆中的位置,size為堆的大小 交換函式,用來交換堆中的兩個元素的值 void swap ...
再談最小生成樹(Prim演算法)
prim演算法用最小堆,圖的鄰接矩陣儲存法,實現。時間複雜度大大優化,按照鄙人的理解,其原理大概是用圖的鄰接矩陣儲存法儲存圖,然後建立乙個最小堆,先弄乙個最小生成樹,剛開始只有乙個元素,即1號元素,最小堆的頂部元素到最小生成樹的距離即為最小堆到最小生成樹的最小距離,然後取出最頂部元素,將最頂部元素放...
最小生成樹 次小生成樹
一 最小生成樹 說到生成樹首先要解釋一下樹,樹是乙個聯通的無向無環圖,多棵樹的集合則被稱為森林。因此,樹具有許多性質 1.兩點之間的路徑是唯一的。2.邊數等於點數減一。3.連線任意兩點都會生成乙個環。對於乙個無向聯通圖g的子圖,如果它包含g的所有點,則它被稱為g的生成樹,而各邊權和最小的生成樹則被稱...