家庭作业,我只是问我的逻辑是否合理,如果没有,我错过了什么案例,而不是怎么做。
我有一项任务,我们必须从提供给我们的数据文件中创建一个随机生成的迷宫。每个房间的数量在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 )
}
}
}
我想我说得对。我唯一担心的是我们需要打印出正确的路径,我知道可以这样做,但我不知道如何在不打印不正确的路径的情况下这样做。
感谢您的时间。
如果缺少任何信息,请告诉我,我会在匆忙后回复。
答案 0 :(得分:1)
您可能应该让findPath()
函数返回指示它是否找到了离开房间的路径而不是总是尝试将所有四条路径移出房间。 (如果你找到了通往北方的出路,你不需要检查是否还有一条通往东方,西方或南方的出路。)
你应该在递归之前将一个房间添加到“路径上的位置”的列表(堆栈)中,如果没有从该房间出来的路径,则在返回之前将其删除。当你离开时,这个列表会告诉你你走的路。