2013-03-17 41 views
0

嘗試在java中對其進行編碼。請建議適用於此場景的任何算法。 輸入是:創建路徑的Java代碼

Col A Col B 
A  B 
A  C 
B  D 
C  A 
C  B 
C  E 
D  A 
D  B 
E  A 

我想使組合,如輸出:

A B D A  
A C A   
A C B D A 
A C E A  
B D B   
C A B D A C 
C A C   
C B D A C 
C E A C 

| 
| 
| 

等。 輸出應該具有相同的起點和終點。

另一種看待它的方法是,你從一個節點A開始,你必須回到節點A,所以你的路徑將從A到B,然後從B到D(因爲從B開始你只能去到一個節點,即D),然後D到A.所以,列A和列B給你可能的路徑,例如從A你只能去B和C,而不是D和E.我希望這有助於。 另外,有什麼辦法來限制沒有。節點的解決方案?

請提出一些建議。

+0

這對我來說好像是一個有向圖。你從數學的角度瞭解他們是什麼,你知道如何用Java實現一個嗎? – Makoto 2013-03-17 20:13:10

回答

0

您需要使用遞歸,你通過數據遞歸你需要標記,你已經訪問,這樣你就不會走同樣的道路無限,

0

從你的數據,你有五個集合不同節點 - A,B,C,d,和E.

如果我們一起將它們合併,那麼我們得到的是什麼涉及什麼的映射:

A: [B, C] 
B: [D] 
C: [B, E] 
D: [A, B] 
E: [A] 

上面表示sparse graph。節點不直接從另一個節點連接回自己,除了B-> D-> B。

下面是我如何接近它的流程。

  • 使用Map<String, List<String>作爲主節點I到達的節點以及此節點連接的邊緣。

  • 選擇一個起始節點,a。將其鏈接放入堆棧。

  • 檢查結束節點是否與開始相同。
    • 如果是這樣,就完成了 - 從堆棧中彈出元素並獲取路徑。
    • 如果不是,則從堆棧中彈出第一個元素並將其鏈接推入堆棧。重複檢查。
  • 如果有什麼流行,再有就是從一個一個沒有路徑。

這種遍歷方式是depth first search。您將深入到圖表中,直到您到達您的路徑或耗盡您的選項。

+0

同樣對你的觀察,「上面代表一個稀疏圖。一個節點不直接連接回自己從另一個節點,除了B-> D-> B。「,還有兩條路徑直接連接回自己的ACA和CAC – user2119976 2013-03-18 13:16:31

+0

Makoto:如果我使用這種算法,是否有辦法將解決方案限制在特定的節點數上,所以我不希望算法探索節點數超過6的路徑。請建議。 – user2119976 2013-03-18 14:11:40

+0

算法深度限制搜索? – user2119976 2013-03-18 14:17:13