最小生成樹

2021-08-30 12:35:14 字數 1099 閱讀 1967

演算法:

1:初始化乙個點a

,並把a

加入候選點陣列point

中,將所有可能與a

相連的點列於陣列array;

2:在array

中選邊,array>

的權值最小的邊,array[i]>;

3:在圖中找權值比array

中還小的邊替代array

中的邊; 3

:迴圈1

,2步驟;

例題(來自:

做這道題時,我自己的測試資料沒通過。我就認為是剛用的0x7fffffff

即int

形的最大值在某個部分溢位了。這個想法本來就不可能發生,因為我沒給它做運算,只是作比較用的,並且我的變數時double

的不可能超出那麼多啊!我真笨。然後我又用輸出函式看每一階段的結果,太不小心,沒考慮函式對整體的影響。最後才發現是比較最大值時的初始化位置不對。

我做這題是有點著急了,手工的步驟沒寫好就寫程式,以至於寫得非常慢。

這個演算法的用途是形成乙個權值最小且覆蓋整個圖的樹即最小生成樹的定義。

例題:(hdu1162)

#include

#include

#include

double date[101][2];

double distance(double ax,double ay,double bx,double by)

double count(int n) }

now=temp;/

替換當前點

sign[now]=false;//

標記以經擴充套件的點

for(j=0;j

dis=distance(date[j][0],date[j][1],date[now][0],date[now][1]);//

重新整理備選樹

if(dis

mintree[j]=dis; }

} }dis=0;

for(i=1;i

dis+=mintree[i];

return dis; }

main()

return 0; }

最小生成樹 次小生成樹

一 最小生成樹 說到生成樹首先要解釋一下樹,樹是乙個聯通的無向無環圖,多棵樹的集合則被稱為森林。因此,樹具有許多性質 1.兩點之間的路徑是唯一的。2.邊數等於點數減一。3.連線任意兩點都會生成乙個環。對於乙個無向聯通圖g的子圖,如果它包含g的所有點,則它被稱為g的生成樹,而各邊權和最小的生成樹則被稱...

最小生成樹

package 圖 最小生成樹是用最少的邊吧把所有的節點連線起來。於是和圖的深度優先搜素差不多。class stack public void push int key public int pop 檢視棧頂的元素 public int peek public boolean isempty cla...

最小生成樹

define max vertex num 20 最大頂點數 typedef int adjmatrix max vertex num max vertex num 鄰接矩陣型別 typedef char vertextype typedef struct mgraph struct dnodecl...