DFS非递归算法

//DFS非递归算法---------------->类似于树的中序遍历 
void DFSTraverse(Graph G)
{
    for(int i = 0;i < G.vexnum ;i++)        //将每个顶点标记未访问 
    {
        visited[i] = false;                     
    }   
    for(int i = 0;i< G.vexnum;i++)          //防止出现不相连的图出现
    {
        if(visited[i]==false)                
        DFS(G,i);
    }
} 
void DFS(Graph G,int v)                     //非递归DFS算法核心部分 
{
    InitStack(S);                           //初始化一个栈,借助栈实现 
    Push(S,v);                              //将首个顶点压入栈底 
    while(!IsEmpty(S))                      //栈不空,则一直循环 
    {
        Pop(S,v);                           //将栈顶弹出 
        visit(v);                           //visit()函数用来表示访问顶点 
        visited[v] = true;                  //标记顶点已经访问 
        for(w = FirstNeighbor(G,v);w >= 0; w = NextNeighbor(G,v,w))     // 
        {
            if(!visited[w])                 //如果该顶点未被访问 
            {
                Push(S,w);                  //将该顶点压入栈 
                visit(w);                   //访问顶点 
                visited[w] = true;          //标记已访问顶点 
            }
        }   
    }

}
    原文作者:递归算法
    原文地址: https://blog.csdn.net/qq_28311921/article/details/78137367
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞