Introduction
Since we already know how to represent graphs, we can go further for some very simple approaches of walking through them. Passing by all the vertices of a graph is a fundamental technique for most of the graph algorithms, such as finding shortest/longest paths, etc.
First thing to note is that graphs are not trees, in most of the cases, so walking through them can’t start from a root, as we do with trees. What we must do first is to decide from where to start – in other words – choosing a starting vertex.
After that we need to know how to proceed. There are two approaches mostly known as “breadth first” and “depth first” search. While depth first search start from a vertex and goes as far as possible, then walks back and passes through vertices that haven’t been visited yet, breath first search is an approach of passing through all the neighbors of the node first, and then go to the next level.
Overview
We can thing of breadth first search as a “wave” walk through the graph. In other words we go level by level, as shown on the picture below.
Initially we mark all vertices as unvisited. A common approach is to create an empty queue where we put the vertices level by level, starting with the initial vertex.
Code
This simple approach is fairly easy to implement. Here’s the PHP implementation in few lines of code.
<?php $g = array( 0 => array(0, 1, 1, 0, 0, 0), 1 => array(1, 0, 0, 1, 0, 0), 2 => array(1, 0, 0, 1, 0, 0), 3 => array(0, 1, 1, 0, 1, 0), 4 => array(0, 0, 0, 1, 0, 1), 5 => array(0, 0, 0, 0, 1, 0), ); function init(&$visited, &$graph) { foreach ($graph as $key => $vertex) { $visited[$key] = 0; } } function breadth_first(&$graph, $start, $visited) { // create an empty queue $q = array(); // initially enqueue only the starting vertex array_push($q, $start); $visited[$start] = 1; echo $start . "\n"; while (count($q)) { $t = array_shift($q); foreach ($graph[$t] as $key => $vertex) { if (!$visited[$key] && $vertex == 1) { $visited[$key] = 1; array_push($q, $key); echo $key . "\t"; } } echo "\n"; } } $visited = array(); init($visited, $g); breadth_first($g, 2, $visited); |
Complexity
The complexity of this algorithm clearly is O(n2).
Application
As I said breadth first and depth first searches are used in many practical cases, as finding shortest/minimal paths etc. That is why understanding these basic principles of walking through a graph is crucial for other, more complex, graph algorithms.
I found code for BFS in C++ language. I think people dont use PHP while they are learning about searching algorrithms.. I hope you would also suggest others to have look at this BFS code in C++
http://in.docsity.com/en-docs/Breadth-first_Search_Algorithm_-_C_plus_plus_Code
The running time of Breadth First Search is O(n + m) where n is # of nodes and m is # of edges.
Hey, do you have a code for BFS in matlab? I am in urgent need for this code. I wrote one myself but it has lot of bugs.
I wrote a Bread First Search in PHP for binary tree.
https://gist.github.com/ankitraturi/b680ade46e229f962cda