图论深度优先搜索

时间:2012-12-01 11:33:14

标签: algorithm graph traversal depth-first-search

在使用堆栈实现DFS遍历时,如果元素已经在堆栈中但未被访问,我们是否需要将元素推入堆栈?

1 个答案:

答案 0 :(得分:1)

  

如果元素已经在里面,我们是否需要将元素推入堆栈   堆栈但没有访问?

答案是没有,因为这是进入循环的一种方式..

如果您使用深度优先搜索遍历图形,则可能会陷入循环中..

避免该问题的最佳方法是使用禁忌列表,该列表保留所有被访问节点的ID。

stack.push(init);

while (!stack.empty())
{
    current = stack.pop();
    taboo.add(current.id);

    if (isGoal(current))
    {
        break;
    }

    for (Node neighbor : getNeighbors(current))
    {
        if (!taboo.contains(neighbor.id))
        {
            stack.push(neighbor);
        }
    }

}
相关问题