當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python NetworkX shortest_simple_paths用法及代碼示例


本文簡要介紹 networkx.algorithms.simple_paths.shortest_simple_paths 的用法。

用法:

shortest_simple_paths(G, source, target, weight=None)

生成圖 G 中從源到目標的所有簡單路徑,

從最短的開始。

簡單路徑是沒有重複節點的路徑。

如果要使用加權最短路徑搜索,則不允許使用負權重。

參數

GNetworkX 圖
source節點

路徑的起始節點

target節點

路徑的結束節點

weight字符串或函數

如果是字符串,則為要用作權重的邊屬性的名稱。

如果是函數,邊的權重就是函數返回的值。該函數必須準確地接受三個位置參數:一條邊的兩個端點和該邊的邊屬性字典。該函數必須返回一個數字。

如果 None 所有邊都被認為具有單位權重。默認值無。

返回

path_generator:生成器

生成簡單路徑列表的生成器,按從最短到最長的順序排列。

拋出

NetworkXNoPath

如果源和目標之間不存在路徑。

NetworkXError

如果源或目標節點不在輸入圖中。

NetworkXNotImplemented

如果輸入圖是 Multi[Di]Graph。

注意

該過程基於 Jin Y. Yen [1] 的算法。查找第一個 路徑需要 操作。

參考

1

Jin Y. Yen, “Finding the K Shortest Loopless Paths in a Network”, Management Science, Vol. 17, No. 11, Theory Series (Jul., 1971), pp. 712-716.

例子

>>> G = nx.cycle_graph(7)
>>> paths = list(nx.shortest_simple_paths(G, 0, 3))
>>> print(paths)
[[0, 1, 2, 3], [0, 6, 5, 4, 3]]

您可以使用此函數有效地計算兩個節點之間的 k 個最短/最佳路徑。

>>> from itertools import islice
>>> def k_shortest_paths(G, source, target, k, weight=None):
...     return list(
...         islice(nx.shortest_simple_paths(G, source, target, weight=weight), k)
...     )
>>> for path in k_shortest_paths(G, 0, 3, 2):
...     print(path)
[0, 1, 2, 3]
[0, 6, 5, 4, 3]

相關用法


注:本文由純淨天空篩選整理自networkx.org大神的英文原創作品 networkx.algorithms.simple_paths.shortest_simple_paths。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。