2011-12-10 32 views
0

家庭作业,我只是问,如果我的逻辑是合理的,如果没有,我错过了什么情况,而不是如何去做。递归逃脱迷宫

我有一个任务,我们必须创建一个随机生成迷宫的数据文件给我们。每个房间都有一个介于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

目前不打印任何东西,再加上如其他人在没有必要的,如果您应该改变。 – FailedDev

+0

如果需要的话,因为外面是一个房间没有指向任何与它的NSEW指针,我不想访问错误的内存。但是我没有分享这些信息,对不起。 – Joshua

+0

那么,如果你写了(curRoom - > myNumber!= 0){...}而没有其他的呢? – FailedDev

回答

1

您应该可能会让findPath()函数返回一个指示,表明它是否在房间外找到了一条路径,而不是始终尝试将所有四条路径都排除在房间之外。 (如果你找到一条出路,你不需要检查是否有东西走向,西或南)。

你应该给房间添加一个房间(堆栈)在递归之前'路径上的地点',如果没有从这个房间出去的路径,在返回之前将其移除。当你走出去时,这个列表会告诉你你走的路径。

+0

哈哈我几分钟前就想出了类似的东西。一旦完成写作,我将发布我的解决方案。 – Joshua