算法思想:
使用一个栈来记忆下一步可能访问的节点,同时使用一个访问标记数组visited来记忆第i个顶点是否在栈内或者曾经在栈内,若是则它以后不再进栈,图采用邻接表的形式存储。
void DFS(Graph &G,int v){
//从顶点v开始深度优先搜索,一次遍历一个连通分量的所有顶点
int w;
InitStack(S);
for(int i=0;i<G.vexnum;i++)
visited[i]=false;
push(S,v);
visited(v)=true;
while(!Isempty(S)){
k=Pop(S);
visit(v);
for(w=FirstNeighbor(G,k);w>=0;w=NextNeighbor(G,k,w))
if(!visited[w]){
push(S,w);
visited[w]=true;
}
}
}