我要以某種方式使用鏈接列表實現堆棧來生成迷宮的解決方案。迷宮從.txt文件讀入,由0表示開放空間,1表示牆壁。 < - 很確定一個出口必須在最後一排?那三個0呢?使用堆棧錄製迷宮路徑解決方案
我試圖使用的算法是:
While Not At End
If Can Go North
Go North
ElseIf Can Go East
Go East
ElseIf Can Go South
Go South
ElseIf Can Go West
Go West
EndIf
Wend
我一直在嘗試的方式,它依賴於一個數組索引中執行++操作。我不知道數組下標運算符[優先於++,所以現在我需要重新考慮工作。在這樣做之前,我想確保這種方法甚至可以在第一時間起作用。任何人都可以看看我的算法代碼到目前爲止,並提供一些反饋? (注:我還需要一些代碼添加到跟蹤注意避免某些類型的無限循環的路徑)與前++執行[
bool notSolved = true;
int path = 0;
row = 0;
col = 0;
rowStack.push(row);
colStack.push(col);
while (notSolved){
//(from perspective of person looking at maze on screen)
if (maze[row--][col] == 0){//if you can go up, go up
rowStack.push(row);
colStack.push(col);
path++;
}
else if (maze[row][col++] == 0){//else if you can go right, go right
rowStack.push(row);
colStack.push(col);
path++;
}
else if (maze[row++][col] == 0){//else if you can go down, go down
rowStack.push(row);
colStack.push(col);
path++;
}
else if (maze[row][col--] == 0){//else if you can go left, go left
rowStack.push(row);
colStack.push(col);
path++;
}
if((maze[row][col] == 0) && (row == (size - 1))){//if we reached an exit
cout << "Solution Path:" << endl;
for (int i = 0; i < path; i++){
cout << "row:" << rowStack.top() << " col:" << colStack.top() << endl;
rowStack.pop();
colStack.pop();
}
notSolved = false;
}
}
問題:
讚賞任何幫助,謝謝!
遞歸是你的朋友在這一個。 – Erix
您有具體問題嗎? –
我不認爲這個算法特別好,例如,如果你在水平隧道中碰到右邊的牆,你會永遠從右到左反彈。 –