我有一个迷宫包含3个字母e
g
w
e
入场g
目标w
代表墙壁。 我找到了e
,但是我必须向内移动并打印一个短划线,当我找到一堵墙时,我应该前往前一个短划线(位置添加到堆叠中)并再次尝试所有可能的方法。
for (int xy = p.row; xy < row; xy++) {
for (int yz = p.col; yz < col; yz++) {
if (s[xy][yz + 1] == ' ') {
s[xy][yz + 1] = '.';
p = new Pos(xy, yz + 1);
st.push(p);
}
if (s[xy - 1][yz] == ' ') {
s[xy - 1][yz] = '.';
p = new Pos(xy - 1, yz);
st.push(p);
}
if (s[xy + 1][yz] == ' ') {
s[xy + 1][yz] = '.';
p = new Pos(xy + 1, yz);
st.push(p);
}
if ((yz >= 1) && (s[xy][yz - 1] == ' ')) {
s[xy][yz - 1] = '.';
p = new Pos(xy, yz - 1);
st.push(p);
}
}
}
答案 0 :(得分:0)
它看起来是什么样的,当你到达那里时,你会推动新的位置。在你知道它的墙之前不要推它。
在您移动之前检查所有方向是否有效。
if(ValidMove(array[x][y])){
//if NOT WALL...Move
}else{
//if IS WALL...check another
}
这样你就有了一堆堆有效的动作。不是墙壁,你不必弹出无效的动作,找到你最后一个。