我要以某种方式使用链接列表实现堆栈来生成迷宫的解决方案。迷宫从.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
您有具体问题吗? –
我不认为这个算法特别好,例如,如果你在水平隧道中碰到右边的墙,你会永远从右到左反弹。 –