This documents the development version of NetworkX. Documentation for the current release can be found here.


bfs_edges(G, source, reverse=False, depth_limit=None, sort_neighbors=None)[source]

Iterate over edges in a breadth-first-search starting at source.

  • G (NetworkX graph)

  • source (node) – Specify starting node for breadth-first search; this function iterates over only those edges in the component reachable from this node.

  • reverse (bool, optional) – If True traverse a directed graph in the reverse direction

  • depth_limit (int, optional(default=len(G))) – Specify the maximum search depth

  • sort_neighbors (function) – A function that takes the list of neighbors of given node as input, and returns an iterator over these neighbors but with custom ordering.


edges – A generator of edges in the breadth-first-search.

Return type



To get the edges in a breadth-first search:

>>> G = nx.path_graph(3)
>>> list(nx.bfs_edges(G, 0))
[(0, 1), (1, 2)]
>>> list(nx.bfs_edges(G, source=0, depth_limit=1))
[(0, 1)]

To get the nodes in a breadth-first search order:

>>> G = nx.path_graph(3)
>>> root = 2
>>> edges = nx.bfs_edges(G, root)
>>> nodes = [root] + [v for u, v in edges]
>>> nodes
[2, 1, 0]


The naming of this function is very similar to edge_bfs. The difference is that ‘edge_bfs’ yields edges even if they extend back to an already explored node while ‘bfs_edges’ yields the edges of the tree that results from a breadth-first-search (BFS) so no edges are reported if they extend to already explored nodes. That means ‘edge_bfs’ reports all edges while ‘bfs_edges’ only reports those traversed by a node-based BFS. Yet another description is that ‘bfs_edges’ reports the edges traversed during BFS while ‘edge_bfs’ reports all edges in the order they are explored.

Based on by D. Eppstein, July 2004. The modifications to allow depth limits based on the Wikipedia article “Depth-limited-search”.

See also

bfs_tree(), dfs_edges(), edge_bfs()