写出图的深度优先搜索DFS算法的非递归算法(图采用邻接表形式)。
在深度优先搜索的非递归算法中使用了一个栈S,记忆下一步可能访问的顶点,同时使用了一个访问数据visited[i],在visited[i]中记忆第i个顶点是否在桟内或曾经在桟内。若是,以后它不能再进栈。
void DFS_Non_RC(AGraph& G, int v)
{//从顶点v开始进行深度优先搜索,一次遍历一个连通分量的所有顶点
int w; //初始序号
InitStack(S); //初始化栈S
for(int i=0; i<G.vexnum; i++)
visited[i]=FALSE; //初始化visited[]
Push(S, v);
visited[v]=TRUE; //v入栈,并置visited[v]
while(!isEmpty(S))
{
k=Pop(S); //栈中退出一个顶点
visit(k); //先访问,再将其子结点入栈
for(w=FirstNeighbor(G, k); w>=0; w=NextNeighbor(G, k, w))
{ //k所有邻接点
if(!visited[w]) //未进过栈的顶点进栈
{
Push(S, w);
visited[w]=TRUE; //做标记,以免再次入栈
}
}
}