Graphs/Breadth First Traversal: Difference between revisions
From charlesreid1
| Line 11: | Line 11: | ||
==BFS Tree== | ==BFS Tree== | ||
Edges discovered during a breadth-first search will form a tree | Edges discovered during a breadth-first search will form a tree. | ||
BFS tree is notable because the tree consists only of the shortest paths between two nodes. | |||
==Edge Classification== | ==Edge Classification== | ||
Revision as of 12:05, 9 September 2017
Also see BFS
Notes
What BFS Gets Us
Breadth-first search is important because it gets us the shortest path (the path with the fewest number of edges) from a vertex u to a vertex v. To state this more rigorously, a path in a breadth-first search tree rooted at vertex u to any other vertex v is guaranteed to be the shortest path from u to v (where shortest path denotes number of edges).
The fact that the BFS tree yields shortest paths is a natural consequence of how the BFS process works.
BFS Tree
Edges discovered during a breadth-first search will form a tree.
BFS tree is notable because the tree consists only of the shortest paths between two nodes.
Edge Classification
For a depth-first search, edges were classified as back edges (connecting vertices to ancestor vertices), forward edges (connecting vertices to descendant vertices), and cross edges (connects vertices to other vertices that are not ancestors or descendants).
For breadth-first search, all BFS tree edges form the shortest path between two vertices. That means that there are NO back edges or forward edges (because if they existed, they would be shorter paths and therefore provide a shorter path).
All edges are classified as:
- Cross edge - connects a vertex to a vertex that is not an ancestor or a descendant in the DFS tree
Pseudocode
def bfs(g, s, discovered):
discovered = empty map
create new queue
queue.add(s)
while queue is not empty:
u = queue.pop()
for e in incident_edges(u):
v = opposite_edge(u, e)
if v not in discovered:
// add (v,e) to discovered
discovered[v] = e
queue.add(v)
Related
Graphs:
- Graphs#Graph Traversals
- Graphs/Depth First Traversal
- Graphs/Breadth First Traversal
- Graphs/Euler Tour
- Graphs/Euler Circuit
Traversals on trees:
Breadth-first search and traversal on trees:
Depth-first search and traversal on trees:
OOP design patterns:
Flags