2015-04-18 34 views
2

我需要找到類之間循環依賴,我立即從「算法與數據結構」當然記得兩兩件事:在項目中尋找循環依賴的算法是什麼?

1)尋找一個單向鏈表(環路Floyd的循環查找算法)

2)深度優先搜索

所以,我有檢查循環依賴

private void FindDependency(IDictionary<string, IEnumerable<string>> serviceDependence) 

在輸入的方法,我們有一個包含,例如一個字典,<"A", < "B", "C" >><"B", < "A", "D" >>,這意味着類A取決於類BC。在輸出結果中,我們在A->B之間存在循環依賴關係(在更復雜的情況下,它將是一個依賴關係鏈)。

我應該使用哪種算法?爲什麼?

+2

建立你的依賴關係圖的dfs-tree並找回後邊緣會正常工作。 – sashas

+0

這是一個重複的http://stackoverflow.com/questions/29703972/in-c-how-to-find-chain-of-circular-dependency –

+3

萬一你不想只檢查那些週期,但也做一個拓撲排序:那些通常找到循環無論如何(每失敗) – Carsten

回答

2

如果你可以在圖中轉換字典,你可以在其上做一個topological sort。 如果存在循環依賴關係,則排序將失敗,否則它將成功。