我正在分析一些代碼的依賴關係。比方說,有一些交織的依賴,就像這樣:將循環圖減少爲樹(依賴關係圖 - >樹)
F
A /|
| /|
| /|
V < V
B<--->C--->E
\ / |
> < |
D<------+
B依賴於A和C ,c取決於B和F Ë取決於C和F d取決於B和C和E
我們對B和C有個問題,他們互相依賴。它們應該組合成一個超級節點。 C和E和F有問題,他們有一個循環。它們應該組合成一個超級節點。
你最終會與
A
|
V
super
node
|
|
D
是否有一個好的圖書館或算法源(Java者優先,但開放的建議),允許這樣的減少?
一個循環中的任何節點都組合成一個節點。指向新節點中任何節點的任何節點都應該指向新節點。新節點中任何節點指向的任何節點都應該使新節點指向該節點。
謝謝!
事實上,這正是我正在尋找的。 Tarjan的算法看起來很簡單,足以實現我自己,但如果你有他們的Java實現,我會很樂意接受鏈接。 – corsiKa 2011-04-01 00:01:34
對不起,我沒有。我覺得像算法,因爲我知道它是有點不同於維基頁面,沒有堆棧...希望別人會擁有它? – usul 2011-04-01 00:07:38
其實,維基百科有一個鏈接。當然,這是wiki,所以風險自負。祝你好運! http://algowiki.net/wiki/index.php?title=Tarjan%27s_algorithm – usul 2011-04-01 00:08:40