2011-03-19 119 views
2

我在使用我的迷宮求解算法時遇到了一些麻煩。我試圖執行左手的規則。牆迷宮求解器

public Direction move(View v) { 
    if (!wallExistsToLeft(v)) { 
     turnLeft(); 
    } else if (v.mayMove(direction)) { 
     return direction; 
    } else if (!wallExistsToRight(v)){ 
     turnRight(); 
    } else { 
     turnAround(); 
    } 
    return direction; 
} 

方向始終設置爲迷宮求解器所面對的當前方向。

turnX改變根據您當前面對

此舉函數返回在迷宮求解器在該方向移動1個格方向的方向。

任何人都可以指向正確的方向嗎?我確信有一些簡單的遞歸方式可以實現,但我似乎無法解決這個問題。

目前我沒有這兩個測試:

enter image description here

任何幫助將不勝感激。

回答

2

從你的照片看來,你總是向右轉。

其中,從您的代碼中,將指示wallExistsToLeft(v)始終返回true,並且v.mayMove(direction)始終返回false。

0

只有在開始和目標位於牆的相同連接組件的牆段旁邊時,左手定則才適用。如果在房間中間有一個支柱,並且你從旁邊開始,那麼你總是會走動它。第二個問題來自空地。如果沒有牆附着,那麼該算法將始終以圓圈形式呈現。通常一個人在提出這個算法的時候會認爲是狹窄的走廊。 因此,無論您的實施是否正確,測試用例都無法通過簡單的左手定則傳遞。