連通問題演算法

2021-09-23 07:51:53 字數 663 閱讀 7966

書籍《演算法:c語言實現》

快速查詢演算法

void connect()

int p, q;

while (cin >> p >> q) }

}

我們把合併操作完成到最後,也就是這是乙個只有兩層的樹。

或者我們把合併操作簡化,讓查詢變得麻煩一點

void connect1()

int q, p;

int i, j;

while (cin >> p >> q)

a[i] = j;

、 }}

這是一種快速合併的演算法,我們關注的只是把樹合併,而不是合併到只有兩層

的數。不過不太好的是,大的樹又可能連線到小的樹上,你可以試著畫畫,我們的路徑

絕對會變長。

於是我們便有了加權快速合併演算法,我們只要比較節點的數目,我們就可以很容易的避免這種問題

#define n 10000

void connect2()

int p, q, i, j;

while (cin >> p >> q)

if (b[i] > b[j])

else

}}

還有一種等分路徑演算法,我會下次更新

Kosaraju演算法解決強連通問題

什麼是強連通分量?在這之前先定義乙個強連通性 strong connectivity 的概念 有向圖中,如果乙個頂點s到t有一條路徑,t到s也有一條路徑,即s與t互相可達,那麼我們說s與t是強連通的。那麼在有向圖中,由互相強連通的頂點構成的分量,稱作強連通分量。首先說一些離散數學相關的結論,由強連通...

演算法I IV,連通問題簡單整理

總結 對於n個物件的連通問題,如果要執行m次合併操作,那麼快速查詢演算法將執行至少m n條指令。bool isconnected 1 int id,int p,int q 當輸入的資料不理想時,快速合併演算法的運算元要遠遠大於m n 2。幸運的是,我們對演算法做乙個簡單地修改就可以保證這樣的最壞情況...

連通問題的幾種演算法 c

連通問題 connectivity problem 是一種圖論問題.在可以把問題歸結為建立兩元素間聯絡的數學問題中,思維圖的運算可以歸結為安插新的結點和邊,最終完成包含表示這兩元素結點的乙個連通圖。這個程式從標準輸入讀取小於n的非負整數對序列 對p q表示 把物件b連線到q 並且輸出還未聯通的輸入對...