我将以某种方式使用堆栈的链表实现来生成迷宫的解决方案。迷宫是从 .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;
}
}
在 ++ 之前执行 [ 的问题:
任何帮助表示赞赏,谢谢!