Breadth First Search (BFS) searches the graph one level (one edge away from the starting vertex) at a time. In this respect, it is
very similar to the level order traversal that we discussed for trees. Starting at some arbitrarily chosen vertex v, we mark v so that we
know we've visited it, process v, and then visit and process all of v's neighbors. Now that we've visited and processed all of v's neighbors, we
need to visit and process all of v's neighbors neighbors. So we go to the first neighbor we visited and visit all of its neighbors, then the
second neighbor we visited, and so on. We continue this process until we've visited all vertices in the graph. We don't use recursion in a BFS
because we don't want to traverse recursively. We want to traverse one level at a time. So imagine that you visit a vertex v, and then you
visit all of v's neighbors w. Now you need to visit each w's neighbors. How are you going to remember all of your w's so that you can go back
and visit their neighbors? You're already marked and processed all of the w's. How are you going to find each w's neighbors if you don't
remember where the w's are? After all, you're not using recursion, so there's no stack to keep track of them. To perform a BFS, we use a
queue. Every time we visit vertex w's neighbors, we dequeue w and enqueue w's neighbors. In this way, we can keep track of which
neighbors belong to which vertex. This is the same technique that we saw for the level-order traversal of a tree. The only new trick is that we
need to make the vertices, so we don't visit them more than once -- and this isn't even new, since this technique was used for the blobs
problem during our discussion of recursion.
No comments:
Post a Comment