收縮強連通分量

來源:互聯網
上載者:User

收縮有向圖中的強連通分量大約是圖論的線性演算法中最具技巧性一種了。我們的首要目的是對於每個頂點設定一個Belong值,也就是它從屬於哪個頂點所代表的強連通分量,至於重建立立圖的邊,不過是將所有邊掃描一遍看是否在新圖中出現而已,比較容易。

下面是利用一遍DFS求強連通分量的方法:對於每個頂點,設立Num、Low、Used、Alive四個屬性,一個Stack儲存當前正在被遍曆的頂點;每訪問一個頂點,將它的Num和Low設立為目前時間戳,Used、Alive設為True,並將頂點入棧,對於它的每條邊,若邊的終點未Used,則訪問,而後用終點的Low值更新它的Low值,對於每個Used且Alive的終點,用它的Num值更新當前值;訪問完畢當前頂點後,若Low與Num相等,說明找到了一個強連通分量,它包括棧中所有在當前頂點上方的頂點,將它們出棧並記下Belong值,出棧的頂點的Alive要置為false。

注意這裡的Low值與求割頂和橋時的Low值的定義不太相同,它是與當前頂點雙連通的最低頂點,所以才要用Alive來標記是否能到達當前頂點。

樣本程式:cow.cpp
(HAOI 2006 cow)

April 18, 2007 · Filed under 程式園

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.