C++ C+中迷宫的DFS最短路径+;

C++ C+中迷宫的DFS最短路径+;,c++,depth-first-search,maze,C++,Depth First Search,Maze,我很难弄清楚如何让它工作。。。我正在尝试使用DFS获取目标的最短路径。我知道BFS更好,但我被要求为此使用DFS。正如你所看到的,我试图在所有通向终点的堆栈之间进行比较,以找到目标,但这不起作用,只有通向目标的第一个堆栈被打印出来。。。我知道我需要在某个地方取消对节点的访问,但我不知道具体如何取消。现在我确实有一条通往目标的路,但不是最短的。非常感谢您的帮助。使用自己的堆栈编写非递归DFS是可能的,但我发现递归解决方案更优雅。以下是其中一个的示意图: DFS(vertex) path.

我很难弄清楚如何让它工作。。。我正在尝试使用DFS获取目标的最短路径。我知道BFS更好,但我被要求为此使用DFS。正如你所看到的,我试图在所有通向终点的堆栈之间进行比较,以找到目标,但这不起作用,只有通向目标的第一个堆栈被打印出来。。。我知道我需要在某个地方取消对节点的访问,但我不知道具体如何取消。现在我确实有一条通往目标的路,但不是最短的。非常感谢您的帮助。

使用自己的堆栈编写非递归DFS是可能的,但我发现递归解决方案更优雅。以下是其中一个的示意图:

DFS(vertex)

    path.push_back(vertex)
    visited[vertex] = true

    if we found the exit
        output path
    else
        for each neighbor v of vertex
            if not visited[v]
                DFS(v)

    visited[vertex] = false
    path.pop_back()

写非递归DFS有什么具体的原因吗?@faranwath没有具体的原因,如果递归在这里更容易,我完全赞成图形是如何定义的?我创建了一个单独的函数来将所有位置映射到一个图形。这对我很有帮助,我基于这个模型完成了它。非常感谢,这比我之前尝试的更有意义,代码也少得多。一旦递归版本正常工作,编写非递归版本将是一个很好的练习。一个优点是,您将堆栈溢出排除在等式之外(没有双关语!),并且您可以更灵活地查看当前状态,或者如果您想对算法进行一些更改的话。