Breadth-First Search
Breadth-First Search
Breadth-first search
From Wikipedia, the free encyclopedia
BFS was invented in the late 1950s by E. F. Moore, who used to find
the shortest path out of a maze,[1] and discovered independently by C.
Y. Lee as a wire routing algorithm (published 1961).[2]
Pseudocode
Input: A graph G and a vertex v of G Animated example of a breadth-
first search
Output: All vertices reachable from v labeled as discovered
1 procedure BFS(G,v) is
2 let Q be a queue
3 Q.push(v)
4 label v as discovered
5 while Q is not empty
6 v ← Q.pop()
7 for all edges from v to w in G.adjacentEdges(v) do
8 if w is not labeled as discovered
9 Q.push(w)
10 label w as discovered
The non-recursive implementation is similar to depth-first search but differs from it in two ways: it uses a queue instead
of a stack, and it checks whether a vertex has been discovered before pushing the vertex rather than delaying this check
until the vertex is popped from the stack.
Analysis
http://en.wikipedia.org/wiki/Breadth-first_search 1/3
2/26/2015 Breadth-first search - Wikipedia, the free encyclopedia
vertex and every edge will be explored in the worst case. Note: may
vary between and , depending on how sparse the input graph
is.
When the number of vertices in the graph is known ahead of time, and
additional data structures are used to determine which vertices have already
been added to the queue, the space complexity can be expressed as
where is the cardinality of the set of vertices. If the graph is represented
by an Adjacency list it occupies [4] space in memory, while
an Adjacency matrix representation occupies .[5]
An example map of Germany with some
Completeness and optimality connections between cities
A search method is optimal if it is guaranteed to find the best solution that The breadth-first tree obtained when
exists. In other words, it will find the path to the goal state that involves the running BFS on the given map and starting
least number of steps. Breadth-first search is an optimal search method, but in Frankfurt
depth-first search is not[6]
Applications
Breadth-first search can be used to solve many problems in graph theory, for example:
Testing bipartiteness
BFS can be used to test bipartiteness, by starting the search at any vertex and giving alternating labels to the vertices
visited during the search. That is, give label 0 to the starting vertex, 1 to all its neighbours, 0 to those neighbours'
neighbours, and so on. If at any step a vertex has (visited) neighbours with the same label as itself, then the graph is not
http://en.wikipedia.org/wiki/Breadth-first_search 2/3
2/26/2015 Breadth-first search - Wikipedia, the free encyclopedia
bipartite. If the search ends without such a situation occurring, then the graph is bipartite.
See also
Depth-first search
Iterative deepening depth-first search
Level structure
Lexicographic breadth-first search
References
1. ^ Skiena, Steven (2008). The Algorithm Design Manual. Springer. p. 480. doi:10.1007/978-1-84800-070-4_4
(https://dx.doi.org/10.1007%2F978-1-84800-070-4_4).
2. ^ Leiserson, Charles E.; Schardl, Tao B. (2010). A Work-Efficient Parallel Breadth-First Search Algorithm (or How to Cope
with the Nondeterminism of Reducers) (http://web.mit.edu/neboat/www/papers/LeisersonSc10.pdf). ACM Symp. on Parallelism
in Algorithms and Architectures.
3. ^ Cormen, Thomas H., Charles E. Leiserson, and Ronald L. Rivest. p.597
4. ^ Cormen, Thomas H., Charles E. Leiserson, and Ronald L. Rivest. p.590
5. ^ Cormen, Thomas H., Charles E. Leiserson, and Ronald L. Rivest. p.591
6. ^ a b Coppin, B. (2004). Artificial intelligence illuminated. Jones & Bartlett Learning. pp. 79–80.
Knuth, Donald E. (1997), The Art Of Computer Programming Vol 1. 3rd ed. (http://www-cs-
faculty.stanford.edu/~knuth/taocp.html), Boston: Addison-Wesley, ISBN 0-201-89683-4
External links
Breadth-First Explanation and Example (http://www.cse.ohio- Wikimedia Commons has
state.edu/~gurari/course/cis680/cis680Ch14.html#QQ1-46-92) media related to Breadth-
first search.
Open Data Structures - Section 12.3.1 - Bread-First Search
(http://opendatastructures.org/versions/edition-0.1e/ods-
java/12_3_Graph_Traversal.html#SECTION001531000000000000000)
http://en.wikipedia.org/wiki/Breadth-first_search 3/3