從某個頂點開始,如何找到相對於該頂點的最長路徑?我一直在瀏覽所有內容,無法找到解決這個問題的方法,這個問題實際上適用於所有可能的DAG案例。 NetworkX中的源代碼將是首選,但是普通的python也可以。我真的很好奇,爲什麼我無法找到任何適當的工作示例,我明白這是一個NP型問題,但我想知道它的最有效的方式。NetworkX找到DAG中最長路徑的最有效方法,無錯誤
回答
首先,我會檢查這個圖是否連接。如果是這樣,那麼最長的路徑是跨所有節點的路徑。如果不是,則表示該頂點包含在連接的組件中。然後,我將使用connected_component_subgraphs
來查找此頂點所在的最大組件。之後,最長路徑是此最大組件中所有節點之間的路徑。
當然,只有在您的路徑中不允許循環時纔有效。
import networkx as nx
G = nx.DiGraph()
G.add_edges_from([(0,1),(0,4),(4,5),(4,6),(5,6),(6,1),(0,2),(2,3),(1,2)])
for path in nx.all_simple_paths(G, source=0, target=3):
print(path)
結果:
[0, 1, 2, 3]
[0, 2, 3]
[0, 4, 5, 6, 1, 2, 3]
[0, 4, 6, 1, 2, 3]
第三個是你喜歡什麼。
我明白這背後的邏輯,但我已經嘗試了很長時間來嘗試解決這個問題,我處於一個需要學習正確源代碼的地步 – tohnotakaki
請注意,我也想知道一個非常高效的這樣做的方式,暴力強制路徑不是我想要做的。我想要一個源代碼沿着更高效的「蠻力」的路線,也就是計算從頂點開始的某條路徑,並且如果頂點碰巧在另一個迭代中被發現,我們可以通過添加當前路徑到已經計算好的路徑 – tohnotakaki
我認爲NetworkX中的所有圖搜索算法都是通過強力。我也不明白爲什麼'dfs_tree'不能滿足你的需求。 – mengg
- 1. Dijkstra在DAG中的最長路徑
- 2. networkx:高效地找到有向圖中絕對最長的路徑
- 3. DAG最短路徑
- 4. 如何使用Python NetworkX找到最長的路徑?
- 5. Dag的最短路徑
- 6. 從源節點上查找DAG上的最長路徑
- 7. DAG中的關鍵路徑和最長路徑是否有區別?
- 8. 最有效的方法,以找到最長的名單
- 9. 具有更新的節點加權DAG和最長路徑
- 10. 最長是如何增加子序列DAG中最長路徑的特例?
- 11. 最長路徑
- 12. Dijkstra的算法 - 只有負成本的DAG最短路徑
- 13. 使用R igraph加權DAG的最長路徑
- 14. 類路徑錯誤:無法找到org.aspectj.lang.JoinPoint
- 15. 無法找到xml路徑錯誤
- 16. 找到MySQL中最接近的整數的最有效方法?
- 17. 如何使用networkx查找加權圖中的最短路徑?
- 18. 下面的方法是否正確找到「樹中最長的路徑」?
- 19. 有序圖中最長的路徑
- 20. 的Python:尋找最長路徑
- 21. CopyFolder方法報告'路徑未找到'有效路徑
- 22. Dijkstra找到最短路徑的算法?
- 23. 找到有向圖的最短路徑
- 24. 如何用密碼查詢找到所有最長的路徑?
- 25. NetworkX vs Scipy所有最短路徑算法
- 26. 查找無向加權樹中最長的路徑
- 27. Inno Setup Compiler「找不到指定的路徑」長路徑錯誤
- 28. 找不到最短路徑
- 29. 在C中找到java路徑的最佳方法#
- 30. 查找最長遞增路徑矩陣
歡迎來到Stack Overflow!你似乎在要求某人爲你寫一些代碼。堆棧溢出是一個問答網站,而不是代碼寫入服務。請[see here](http://stackoverflow.com/help/how-to-ask)學習如何編寫有效的問題。 – JGreenwell