c++ - 递归逃出迷宫

标签 c++ recursion

作业,我只是问我的逻辑是否合理,如果不合理,我缺少什么情况,而不是如何去做。

我有一项任务,我们必须根据提供给我们的数据文件创建一个随机生成的迷宫。每个房间都有一个 1-100 之间的数字,并且有(最多)4 个相邻的房间:北、东、南和西。没有相邻房间的房间将有一个带有负标识符的相邻房间。我们的“人”随机掉入其中一个房间,我们必须找到出路。室外由房间号 0 指定。

除了递归,我已经完成了所有的事情,这几乎完成了。这是我的解决方案:

void Graph::findPath( Room * curRoom )
{
    if( curRoom -> myNumber == 0 )
    //Escaped!
    else
    {
       if( curRoom -> North -> visited == false )
    {   
        curRoom -> visited == true;
        findPath( curRoom -> North )
    }

    if( curRoom -> East -> visited == false )
    {   
        curRoom -> visited == true;
        findPath( curRoom -> East )
    }
    if( curRoom -> South -> visited == false )
    {   
        curRoom -> visited == true;
        findPath( curRoom -> South )
    }
    if( curRoom -> West -> visited == false )
    {   
        curRoom -> visited == true;
        findPath( curRoom -> West )
    }
    }

我想我是对的。我唯一担心的是我们需要打印出正确的路径,我知道这是可以做到的,但我不知道如何在不打印不正确的路径的情况下做到这一点。

感谢您的宝贵时间。

如果缺少任何信息,请告诉我,我会尽快回复。

最佳答案

您可能应该让 findPath() 函数返回一个指示,指示它是否找到了离开房间的路径,而不是总是尝试离开房间的所有四个路径。 (如果你找到了去北的出路,你不需要检查是否还有去东、西或南的出路。)

您可能应该在递归之前将一个房间添加到“路径上的位置”列表(堆栈)中,如果没有从这个房间出来的路径,则在返回之前将其删除。当你出去时,这个列表会告诉你你走过的路。

关于c++ - 递归逃出迷宫,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8454007/

相关文章:

c++ - 如何比较两个迭代器以在 VS2013 上进行单元测试?

c++ - 函数参数 (const char *value, ...) 中的 ... 是什么意思

c++ - 二叉搜索树递归插入

python - DFS 的 Cython 并行化竞争条件

c++ - 点燃 C++ : serialization class not found in cache store

c++ - 如何制作 set<T>(args...) 方法?

c++ - 用项目 C++ 填充 QTreeview

c - 二分查找(递归实现)

c++ - 如何将此嵌套迭代转换为递归解决方案?

java - 使用递归加分数 e=1+1/1!+1/2!+1/3!+