簡體   English   中英

查找圖上所有邊的路徑

[英]Finding the Path of all Edges on a Graph

我正在嘗試獲取覆蓋所有邊的圖形上的路徑,並且只遍歷它們一次。 這意味着將只有兩個“終點”——它們將有奇數個附加節點。 這些端點要么有一個連接邊,要么是環的一部分並有 3 個連接。

因此,在下面的簡單情況下,我需要按 1-2-3-4-5(或 5-4-3-2-1)的順序遍歷節點:

簡單的

在更復雜的情況下,路徑將是 1-2-3-4-2(或 1-2-4-3-2):

 - 圖形

下面也是一個有效的圖表,有 2 個端點:1-2-4-3-2-5

復雜的

我試圖找到一個算法的名稱來解決這個問題,並認為這是“中國郵遞員問題”,但基於https://github.com/rkistner/chinese-postman/blob/master上的代碼實現了這個/postman.py沒有提供我預期的結果。

歐拉路徑看起來幾乎是需要的,但networkx 實現僅適用於封閉(循環)網絡。

我還查看了Hamiltonian Path - 並嘗試了networkx 算法- 但不支持圖形類型。

理想情況下,我想使用 Python 和 networkx 來實現這一點,並且可能有一個簡單的解決方案已經是庫的一部分,但我似乎找不到它。

您正在尋找只訪問每條邊一次的歐拉路徑 您可以使用Fleury 的算法來生成路徑。 Fleury 算法的時間復雜度為O(E^2) ,如果您需要更高效的算法,請查看Hierholzer 算法,該算法O(E)

對於實現此功能的 networkx 庫,還有一個未合並的拉取請求 易於使用。

(對於 networkx 1.11, .edge必須替換為.edge_iter )。

這被稱為圖的歐拉路徑 它現在已作為eulerian_path()添加到 NetworkX 中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM