1. 程式人生 > >專題四-圖論總結

專題四-圖論總結

  在本專題中,有著很多核心相同的題目。把頂點和邊的權值對應到程式碼中,求出最小生成子樹或者運用並查集求出最小連通子圖、最短路徑,正是圖的內涵所在。而且,各種演算法大都以貪心為基礎,對邊的權值排序,然後運用並查集進行處理。prim演算法用於稠密圖,因為演算法本身是從兩個不連通的集合選取邊最小的點,最終得到最小生成樹;kruskal演算法用於稀疏圖,因為演算法原則是選邊,如果邊數太多的話,並不適用。然後是求出最短路徑的演算法,SPFA 其實就是Bellman-Ford的一種佇列實現,減少了冗餘,即鬆馳的邊至少不會以一個d為∞的點為起點。鬆弛技術是這些演算法的關鍵所在,其虛擬碼如下:

Relax(u,v,w)

if(d[v]>d[u]+w(u,v))

            d[v]=d[u]+w(u,v)

資料結構中同樣講述過圖論,但是並沒有像ACM這樣面向實際去解決問題。擁有了這些思想,把問題向這些模板靠攏,進而寫出程式碼,解決問題,是圖論專題留給我的最大收穫。