我正在構建一個遊戲,玩家可以隨機獲得一組節點,並嘗試通過按照特定順序放置節點來構建最長的列表。每個節點都有零個或多個連接,這些連接必須與列表中下一個節點的至少一個連接相匹配。例如,一個節點可能是這樣的:在給定一些約束的情況下,我可以使用什麼算法來驗證可以連接的節點列表?
+--+
left connections A B right connections
B C
+--+
以上節點(例如節點)可以與任何這些節點的連接:
+--+
C | This node can connect to the right side of the example node (matches C)
D |
+--+
+--+
B K This node can connect to the left side of the example node (matches A)
L A This node can connect to the right side of the example node (matches B)
+--+
因此,考慮到這三個節點,球員可能在列表中匹配它們如下:
+--+ +--+ +--+
B K A B C |
L A -A- B C -C- D |
+--+ +--+ +--+
我需要驗證玩家的選擇。玩家不必首先按照正確的順序選擇節點,但是他們的最終選擇必須能夠連接成一個連續的線性列表。因此,給定一個無序節點數組(玩家選擇),我需要將節點形成一個像上面這樣的有效列表,或者向玩家顯示一個錯誤。
我可以蠻力驗證,但我希望找到一個更優雅的解決方案。
這些套件有多大?如果不是這樣,比蠻力更精細的東西可能不值得麻煩。對於大集合,動態編程可能是合適的。 –
@ScottHunter玩家的選擇可能是5或6個節點。 – Stephen
從沒有周期的情況下,從左到右追蹤路徑是不夠的?即你只能在一個方向上(右)在一個鏈接'-A-'上移動,你只能向上/向下/向右移動。 如果您擔心用戶會構建多條死路的路徑,那麼您真的需要首先遍歷一棵樹,其中至少有一片葉子到達目的地「一側」。如果你想要最短路徑,我想dykstra的算法可能在這裏工作(但我對它有點模糊)。 –