作业,我只是问我的逻辑是否合理,如果不合理,我缺少什么情况,而不是如何去做。
我有一项任务,我们必须根据提供给我们的数据文件创建一个随机生成的迷宫。每个房间都有一个 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/