Итеративный DFS против рекурсивного DFS и различный порядок элементов

Я написал рекурсивный алгоритм DFS для обхода графа:

void Graph<E, N>::DFS(Node n)
{
    std::cout << ReadNode(n) << " ";

    MarkVisited(n);

    NodeList adjnodes = Adjacent(n);

    NodeList::position pos = adjnodes.FirstPosition();

    while(!adjnodes.End(pos))
    {
        Node adj = adjnodes.ReadList(pos);

        if(!IsMarked(adj))
            DFS(adj);

        pos = adjnodes.NextPosition(pos);
    }
}

Затем я написал итеративный алгоритм DFS с использованием стека:

template <typename E, typename N>
void Graph<E, N>::IterativeDFS(Node n)
{
    Stack<Node> stack;

    stack.Push(n);

    while(!stack.IsEmpty())
    {
        Node u = stack.Read();

        stack.Pop();

        if(!IsMarked(u))
        {
            std::cout << ReadNode(u) << " ";

            MarkVisited(u);

            NodeList adjnodes = Adjacent(u);

            NodeList::position pos = adjnodes.FirstPosition();

            while(!adjnodes.End(pos))
            {
                stack.Push(adjnodes.ReadList(pos));

                pos = adjnodes.NextPosition(pos);
            }
        }
    }

Моя проблема в том, что в графе, в котором, например, я ввожу три узла 'a', 'b', 'c' с дугами ('a', 'b') и ('a', 'c'), мой выход:

'a', 'b', 'c' в рекурсивной версии DFS, и:

'a', 'c', 'b' в итеративной версии DFS.

Как я могу получить тот же порядок? Я что-то делаю не так?

Спасибо!

40
задан dsolimano 11 April 2012 в 00:24
поделиться