PKU 1251 最小生成樹

背景:

無向連通圖G=(V,E)的最小生成樹算法:

1.prim算法:

    (1)初始頂點集合S爲空,把任意一個頂點s加入集合S.

    (2)迭代|V|-1次,每次加入頂點u,使得v屬於S,u不屬於S並且(u,v)權值最小, 記錄邊(u,v)

    (3)所有記錄過的邊(u,v)即最小生成樹

2.kruskal算法:

    (1)把有|E|中邊按權值非降排序

    (2)邊初始集合S爲空,每次加入權值最小的邊,當加入後邊集合不構成迴路,刪掉此邊。迴路判定可以採取並查集方法

    (3)邊集合爲最小生成樹

 

題意:求n個村莊的最小生成樹,1<n<27,n個村莊用前n個大寫字母表示。輸入n和 n-1個頂點與之連通的頂點和權值。輸入最小生成樹邊權值和。邊權值小於100,邊集合|E|小於等於75,一個頂點連接的邊數小於等於15.

分析:prim算法對於處理稠密鄰接矩陣有效,而kruskal對於邊稀疏矩陣有效。這道題應該kruskal更有效一些。不過兩個算法在Judge上運行都是Memory 228K, 時間爲0MS,不知道那些Memory<30K是怎麼優化的。

 

源碼:

 

 

                  

發佈了42 篇原創文章 · 獲贊 6 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章