9.7.6.9. networkx.algorithms.shortest_paths.weighted.single_source_dijkstra¶
-
networkx.algorithms.shortest_paths.weighted.single_source_dijkstra(G, source, target=None, cutoff=None, weight='weight')[source]¶ Find shortest weighted paths and lengths from a source node.
Compute the shortest path length between source and all other reachable nodes for a weighted graph.
Uses Dijkstra’s algorithm to compute shortest paths and lengths between a source and all other reachable nodes in a weighted graph.
Parameters: G : NetworkX graph
source : node label
Starting node for path
target : node label, optional
Ending node for path
cutoff : integer or float, optional
Depth to stop the search. Only return paths with length <= cutoff.
weight : string or function
If this is a string, then edge weights will be accessed via the edge attribute with this key (that is, the weight of the edge joining u to v will be
G.edge[u][v][weight]). If no such edge attribute exists, the weight of the edge is assumed to be one.If this is a function, the weight of an edge is the value returned by the function. The function must accept exactly three positional arguments: the two endpoints of an edge and the dictionary of edge attributes for that edge. The function must return a number.
Returns: distance,path : dictionaries
Returns a tuple of two dictionaries keyed by node. The first dictionary stores distance from the source. The second stores the path from the source to that node.
See also
single_source_dijkstra_path,single_source_dijkstra_path_length,single_source_bellman_fordNotes
Edge weight attributes must be numerical. Distances are calculated as sums of weighted edges traversed.
The weight function can be used to hide edges by returning None. So
weight = lambda u, v, d: 1 if d['color']=="red" else Nonewill find the shortest red path.Based on the Python cookbook recipe (119466) at http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/119466
This algorithm is not guaranteed to work if edge weights are negative or are floating point numbers (overflows and roundoff errors can cause problems).
Examples
>>> G=nx.path_graph(5) >>> length,path=nx.single_source_dijkstra(G,0) >>> print(length[4]) 4 >>> print(length) {0: 0, 1: 1, 2: 2, 3: 3, 4: 4} >>> path[4] [0, 1, 2, 3, 4]