非递归深度优先遍历算法

当然是伪码,自己在纸上模拟了一遍是没错的。如果发现什么错误欢迎指正。

N_DFS(gragh g, int i){
    int j;
    seqstack s;
    INITSTACK(s);
    while(!EMPTY(s)){
        if(visited[i] == 0){
            visited[i] = 1;
            printf(g.vexs[i]);
        }
        for(j = 0; j != n;++j)
            if((g.arcs[i][j] == 1) && (!visited[j])){
                PUSH(s,j);
                i = j;
                break;
            }
            else{
                POP(s);
                i = GETTOP(s);
            }
    }
}

这几日都在看数据结构,有种想把书里递归算法都写成非递归形式的想法。昨天看到书上有前序中序非递归遍历二叉树的算法,看了看也不算太难。今天看到DFS刚好看到书里说这个不是很难可以试着自己去实现下。
先是模拟了一遍思路,当然在纸上。然后花了有两个小时才算完成。没想到居然花了这么久,以为很简单的。看来眼高手低要不得啊!
以后看到有趣的算法还是自己去实现它才算理解消化了

你可能感兴趣的:(算法,C++)