2015-09-10 37 views
0

我一直被困在這個問題很長一段時間,無法在網絡上的任何其他地方找到幫助,所以這可能證明對其他人有用。Java中的方法執行順序排序

我有一個單詞列表,列表中的每個單詞都有它自己的兩個單詞單詞,它應該在之前和之後。

下面是一個例子:

"forest" - before:{"tree"} 
"frog" - after:{"mushroom"} 
"mushroom" 
"leaf" - after:{"mushroom"}, before: {"frog"} 
"tree" - before:{"mushroom"} 

這些話應按照下列順序排列:森林,樹木,蘑菇,葉子,青蛙。因此,基本上,「之後」並不意味着一個單詞需要一個一個接一個(也不是「之前」),它不能在所述單詞之前(或在「之前」情況之後)。

我試圖通過使用數組列表和添加在自定義指標,即只要像「葉子」的元件插入(元件,其它兩個元件之間的雲)破壞元件解決這個問題。

這個例子進行了簡化,因此不會混淆任何人,我其實寫一個Mod裝載的排序,其註釋說,他們之前應該執行後/這MODS的方法。

編輯: 我管理通過轉動前到後包含在之前的陣列元件來解決這個問題。

之後,我所做的就是迭代所有元素,然後檢查該元素是否已經執行(您會在第二秒中看到爲什麼),如果未執行,則在元素之後首先執行所有元素方式,然後執行實際的元素。我也做一些檢查,以防止週期等。

+0

你能發表一些你試過的代碼嗎?有沒有告訴你有什麼問題? – jackie

回答

1

我不會爲你編寫代碼,但我會概述一些關於算法的提示。

實現的第一件事是,有在after信息是沒有意義的,因爲說B來後A是等於說AB之前。首先將所有after信息替換爲before信息。

接下來,你必須認識到,如果一個項目是在before陣列中的一個,它不能先走了。所以你需要做的就是查看所有before數組,以查找其中沒有的元素。如果這些數組中沒有一個元素,那麼該元素可以先放置。 (如果沒有,這個問題是不可能的)。

一旦你決定哪個元素先行,放棄其before陣列,通過遞歸完成列表。

+0

將所有塊之前的塊轉換爲塊之後,解決這個問題非常簡單。感謝幫助。 –

0

這是Topological Sort問題的一個實例。

的方法的名稱可以被看作圖中的節點,和你的「前」和「後」的關係是針對在邊說圖。