回答
如果你有節點正在尋找以跳躍方式尋找路由,那麼一個圖可能是正確的方法。不過,我不確定我是否理解你想要做什麼以及約束是什麼,特別是關於「任何節點都可以連接到任何其他節點」......這似乎有點開放。
不管怎樣,與一些圖表示:
它似乎是從第一個節點開始,並從那裏進行深度優先搜索,並在以下情況下終止搜索:(a)所採用的跳數大於您指定的數字或(b)我們有到達第二個節點;這將確定連接兩個節點的第一條(不僅僅是)路徑(最多)多跳。
如果它必須完全是指定的跳數,如果跳數已經超過,則終止搜索的任何分支,如果您也到達了第二個節點,則終止成功。
啞方法:(數據結構是堆棧數組)。這基本上是廣度優先搜索(BFS)深度N,除了如果允許循環(你沒有澄清,但我假設他們是),你不排除訪問節點進一步搜索。索引0(索引=深度)
對於每個電平/指數存儲在陣列中的堆疊上
推起始節點 「升」 0-N:
有關各節點一個存儲在級別「l」的堆棧,找到它的所有鄰居,並將它們推入存儲在級別「l + 1」中的堆棧。
重要事項:如果您的任務允許查找包含循環的路徑,請不要檢查您是否已經訪問過您添加的任何節點。如果不允許循環中,使用訪問節點的哈希值,當你結束等級「N-1」不添加任何節點兩次**
停止。
將您剛剛添加到堆棧的所有節點循環到索引「N」並找到您的目標節點。如果找到了:成功,如果沒有,就沒有這樣的路徑。
請注意,如果「每一個節點可以連接」你在暗示一個完全連通圖,則存在不涉及實際訪問節點
數學答案(不過,公式爲過長的StackOverflow的文本輸入字段)
只是在開玩笑 - 如果完全連通的圖N> = 3的節點的數目可能在任何步驟S中從任何節點行進到任何節點。如果S%3 == 0,則繞過用於S/3-1次,然後轉到任何其他節點,返回到目的地,然後轉到目標節點。如果S%3 == 1,則圍繞任何三角形行駛S/3-1次,然後前往目標節點。如果S%3 == 2,則繞S/3-1周的任何三角形行進,然後轉到任何其他節點,然後轉到目標節點。 DONE。 – DVK 2009-10-21 20:59:34
- 1. 搜索XQuery中兩個圖形節點之間的路徑
- 2. 在帶權無向圖中,如何找到兩個節點之間的固定長度路徑?
- 3. 查找圖中兩個節點之間固定跳數的最短路徑
- 4. 找到任意兩個節點之間最長的路徑
- 5. 兩點之間最長的路徑
- 6. 如何找到兩個節點之間的循環圖中最長的路徑?
- 7. 圖中任意兩個節點之間的最長最短路徑
- 8. 計算節點之間的路徑長度?
- 9. 誘導子圖;兩個節點之間的路徑存在
- 10. 查找圖中兩個節點之間指定長度的所有可能路徑
- 11. 查找兩個頂點(節點)之間的所有路徑
- 12. 如何找到兩個感官之間的路徑長度?
- 13. 找到兩個節點之間所有可能的路徑在向標定圖
- 14. 未加權圖/樹中兩個給定節點之間的最短路徑
- 15. 確定無向圖具有兩個頂點之間的路徑
- 16. Neo4j的兩個節點之間的簡單路徑,而不指定的最大長度
- 17. 如何找到Lisp中兩個節點之間最長的路徑?
- 18. 兩個頂點之間的最長路徑
- 19. 三角形幾何 - 兩個固定點,一邊長度變化
- 20. Neo4j:找到兩個節點之間有多個路徑
- 21. GraphViz,找到兩個節點之間的最短路徑
- 22. 查找兩個節點之間的所有路徑
- 23. 在兩個節點之間創建專用路徑的算法
- 24. 使用BFS查找兩個節點之間的所有路徑
- 25. 使用DFS查找兩個節點之間的所有路徑
- 26. 兩個節點之間的最短路徑數
- 27. xquery - BFS查找兩個節點之間的所有路徑
- 28. DAG中兩個節點之間的路徑數
- 29. Neo4j - 如何找到兩個節點之間的最短路徑
- 30. 複製一個節點路徑 - CYPHER(查詢兩個節點之間的所有路徑)
寫我不知道,如果一個很好的算法存在,但我不知道你是不是總是將有一個有效的解決方案。例如,如果您有三角形圖形,則不會從A點到B點找到需要3跳的路徑。 – 2009-10-21 20:22:52
如果您可以重新訪問節點,例如在圈子中旅行。從1到2,進入1-3-1-2。 3跳,你在那裏。 – DVK 2009-10-21 21:00:23