图采用了邻接表的形式储存。

带不带权都无所谓的

 

深度优先搜索 Depth First Search

道理和树的先序遍历差不多,把将要访问的点入栈,然后从栈里取点进行访问。

有些被调用的函数的具体代码将会在文章最后补上 ,但是函数功能看注释就好了

 1 void GraphAdjacencyListWeight::DFSAdvanced(int StartVertex) {
 2     int *visited = new int[VertexNumber];
 3     memset(visited, 0, VertexNumber * sizeof(int));
 4 
 5     stack<int> S;
 6     S.push(StartVertex);
 7 
 8     int NextVertex = -1;
 9 
10     while (!IsAllVisited(visited)) {
11         //如果有其他的连通分量
12         if (S.empty()) {
13             //随便找一个没被访问的点丢进栈
14             for (int lop = 0; lop < VertexNumber; lop++) {
15                 if (visited[lop] == 0) {
16                     S.push(lop);
17                     break;
18                 }
19             }
20         }
21         while (!S.empty()) {
22             NextVertex = S.top();
23             S.pop();
24 
25             if (visited[NextVertex] != 1) {
26                 //访问该点
27                 VisitVertex(NextVertex);
28                 //标记为访问过
29                 visited[NextVertex] = 1;
30                 //将下一个没被访问过的邻接点入栈
31                 PushValidVertexToStack(S, NextVertex, visited);
32             }
33         }
34     }
35     delete []visited;
36 }
DFS

相关文章: