我创建了一个通过 ASCII 迷宫运行的程序,但我不想为以下情况创建过滤器:
####
..X#
####
“#”表示墙。
“X”表示位置。
'。' 是留下的“面包屑”。
我也可以这样,因为它位于矩阵中,如下所示:
#### [(x-1, y-1)][(x-1, y)][(x-1, y+1)]
..X# --> [(x, y - 1)][( x, y )][(x, y + 1)]
#### [(x-1, y-1)][(x+1, y)][(x+1, y+1)]
有 4 种可能的情况,所以我在 C 中做了一个 else if 语句,
else if(mazePointer->matrix[curX-1][curY] == '#' &&
mazePointer->matrix[curX][curY+1] == '#' &&
mazePointer->matrix[curX+1][curY] == '#'){
walkPointer->newX = curX;
walkPointer->newY = curY-1;
mazePointer->matrix[curX][curY] = '+';
return 1;
}
var curX & curY 是当时的矩阵坐标。
此示例适合最上面给定示例的矩阵坐标。在这种情况下,我想做的是向后退 1 个空格,然后在我退一个空格之前在我的位置上加上一个“+”。这将保证我不会遇到同样的情况,因为不可能在一个用“+”“标记”的地方结束。我只能降落在空的或充满“。”的地方。
但是知道了奇怪的事情,在我看来很奇怪,因为这个“过滤器”只会跳过当前的情况。这些陈述不会是真的。谁能解释我在搞砸什么?