图采用了邻接表的形式储存。
带不带权都无所谓的
深度优先搜索 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 }