networkx.algorithms.shortest_paths.weighted.bidirectional_dijkstra
的用法。用法:
bidirectional_dijkstra(G, source, target, weight='weight')
Dijkstra 使用雙向搜索的最短路徑算法。
- G:NetworkX 圖
- source:節點
起始節點。
- target:節點
結束節點。
- weight:字符串或函數
如果這是一個字符串,則將通過帶有此鍵的邊屬性訪問邊權重(即,連接
u
到v
的邊的權重將為G.edges[u, v][weight]
)。如果不存在這樣的邊屬性,則假設邊的權重為 1。如果這是一個函數,則邊的權重是函數返回的值。該函數必須準確地接受三個位置參數:一條邊的兩個端點和該邊的邊屬性字典。該函數必須返回一個數字。
- length, path:號碼和清單
長度是從源到目標的距離。 path 是從源到目標的路徑上的節點列表。
- NodeNotFound
如果
source
或target
不在G
中。- NetworkXNoPath
如果源和目標之間不存在路徑。
參數:
返回:
拋出:
注意:
邊權重屬性必須是數字。距離計算為遍曆的加權邊的總和。
權重函數可用於通過返回 None 來隱藏邊。所以
weight = lambda u, v, d: 1 if d['color']=="red" else None
會找到最短的紅色路徑。在實踐中,雙向 Dijkstra 的速度是普通 Dijkstra 的兩倍多。
普通 Dijkstra 從源頭以sphere-like 的方式擴展節點。這個球體的半徑最終將是最短路徑的長度。雙向 Dijkstra 將從源節點和目標節點擴展節點,使兩個球體的半徑為該半徑的一半。第一個球體的體積是
pi*r*r
而其他的是2*pi*r/2*r/2
,占體積的一半。如果邊權重為負數或浮點數(溢出和舍入錯誤可能導致問題),則不保證此算法有效。
例子:
>>> G = nx.path_graph(5) >>> length, path = nx.bidirectional_dijkstra(G, 0, 4) >>> print(length) 4 >>> print(path) [0, 1, 2, 3, 4]
相關用法
- Python NetworkX binomial_graph用法及代碼示例
- Python NetworkX biconnected_component_edges用法及代碼示例
- Python NetworkX biconnected_components用法及代碼示例
- Python NetworkX bipartite_layout用法及代碼示例
- Python NetworkX boykov_kolmogorov用法及代碼示例
- Python NetworkX bfs_edges用法及代碼示例
- Python NetworkX bellman_ford_path用法及代碼示例
- Python NetworkX bfs_beam_edges用法及代碼示例
- Python NetworkX bfs_predecessors用法及代碼示例
- Python NetworkX bfs_successors用法及代碼示例
- Python NetworkX bridges用法及代碼示例
- Python NetworkX bfs_tree用法及代碼示例
- Python NetworkX bridge_components用法及代碼示例
- Python NetworkX bethe_hessian_matrix用法及代碼示例
- Python NetworkX bellman_ford_predecessor_and_distance用法及代碼示例
- Python NetworkX bellman_ford_path_length用法及代碼示例
- Python NetworkX negative_edge_cycle用法及代碼示例
- Python NetworkX voronoi_cells用法及代碼示例
- Python NetworkX numerical_edge_match用法及代碼示例
- Python NetworkX inverse_line_graph用法及代碼示例
- Python NetworkX LFR_benchmark_graph用法及代碼示例
- Python NetworkX write_graph6用法及代碼示例
- Python NetworkX DiGraph.__contains__用法及代碼示例
- Python NetworkX average_degree_connectivity用法及代碼示例
- Python NetworkX eulerian_circuit用法及代碼示例
注:本文由純淨天空篩選整理自networkx.org大神的英文原創作品 networkx.algorithms.shortest_paths.weighted.bidirectional_dijkstra。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。