2011-12-10 120 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