1. Preface
ReviewAlgorithmChapter 4: path in the figure. First, the algorithm breadth first traversal is completed, and the queue structure is used.
2. References
Http://blog.csdn.net/lengyuhong/archive/2010/01/06/5145100.aspx
3. The relevant blog has completed the depth-first traversal of the graph in the previous blog, and uses the adjacent matrix representation.
Depth-first traversal of an image (using the adjacent matrix)
4.CodeImplementation
# Include <iostream> <br/> # include <malloc. h> <br/> # include <queue> <br/> # include <stdlib. h> <br/> using namespace STD; </P> <p> # define maxnum 100 // defines the maximum number of vertices in the adjacent area. <br/> int visited [maxnum]; // use the visited array to identify whether the vertex has been accessed. 0 indicates that it has not been accessed, and 1 indicates that it has been accessed. <br/> queue <int> q; <br/> // The structure of the graph's Adjacent matrix <br/> typedef struct <br/> {<br/> char V [maxnum]; // vertex information of the graph <br/> int e [maxnum] [maxnum]; // vertex information of the graph <br/> int vnum; // Number of vertices <br/> int Enum; // Number of edges <br/>} Graph; <br/> // function declaration <br/> void creategraph (graph * g); // create a graph G <br/> void BFS (graph * g ); // traverse graph G by breadth first </P> <p> void BFS (graph * g, int I) <br/>{< br/> int K, J; <br/> cout <"vertex" <I <"accessed" <Endl; <br/> visited [I] = 1; // mark vertex I accessed </P> <p> q. push (I); <br/> while (! Q. empty () <br/>{< br/> K = Q. front (); <br/> q. pop (); <br/> // cout <q. size (); <br/> for (j = 1; j <= G-> vnum; j ++) <br/>{< br/> If (G-> E [k] [J]! = 0 & visited [J] = 0) <br/> {<br/> cout <"vertex" <j <"accessed" <Endl; <br/> visited [J] = 1; <br/> q. push (j); <br/>}</P> <p> void BFS (graph * g) <br/>{< br/> int I; <br/> // initialize the visited array, indicates that at first all vertices have not been accessed <br/> for (I = 1; I <= G-> vnum; I ++) <br/> visited [I] = 0; <br/> // breadth-first search <br/> for (I = 1; I <= G-> vnum; I ++) <br/>{< br/> If (visited [I] = 0) // If This vertex is accessed, then we traverse the breadth first from vertex I <br/> BFS (G, I ); <br/>}< br/> void creategraph (graph * g) // create graph G <br/>{< br/> cout <"creating undirected graph... "<Endl; <br/> cout <" Enter the number of vertices vnum: "; <br/> CIN> G-> vnum; <br/> cout <"Enter the number of edges Enum:"; <br/> CIN> G-> Enum; <br/> int I, J; </P> <p> // initial drawing G <br/> for (I = 1; I <= G-> vnum; I ++) <br/> for (j = 1; j <= G-> vnum; j ++) <br/> G-> E [I] [J] = 0; </P> <p> // condition of the input edge <br/> cout <"Enter the header and end of the edge" <Endl; <br/> for (int K = 1; k <= G-> Enum; k ++) <br/>{< br/> CIN> I> J; <br/> G-> E [I] [J] = 1; <br/> G-> E [J] [I] = 1; <br/>}</P> <p> int main () <br/>{< br/> graph * g; <br/> G = (graph *) malloc (sizeof (graph); <br/> creategraph (g); <br/> BFS (g ); <br/> system ("pause"); <br/> return 0; <br/>}
Test input:
Creating undirected graph...
Enter the number of vertices vnum: 6
Enter the number of edges Enum: 5
Enter the edge header and end
1 2
1 4
1 5
1 6
2 3
Output result:
Vertex 1 has been accessed
Vertex 2 has been accessed
Vertex 4 has been accessed
Vertex 5 has been accessed
Vertex 6 has been accessed
Vertex 3 has been accessed
Press any key to continue...