我正在编写一个初学者级别的递归函数,它可以在给定的12x12迷宫中找到一条路径。我有一个单独的函数来计算初始位置(初始正方形的数量),但在这个任务中,位置是给定的,它是59的正方形。函数mazeTraverse根据探路器的位置计算x和y,将maze[y][x]转换为" x ",然后调用自身以根据周围的情况更改位置。
#include <stdio.h>
void mazeTraverse(char *[][12], int);
int main()
{
char *labyrinth[12][12] = {{" # ", " # ", " # ", " # ", " # ", " # ", " # ", " # ", " # ", " # ", " # ", " # "},
{" # ", " . ", " . ", " . ", " # ", " . ", " . ", " . ", " . ", " . ", " . ", " # "},
{" . ", " . ", " # ", " . ", " # ", " . ", " # ", " # ", " # ", " # ", " . ", " # "},
{" # ", " # ", " # ", " . ", " # ", " . ", " . ", " . ", " . ", " # ", " . ", " # "},
{" # ", " . ", " . ", " . ", " . ", " # ", " # ", " # ", " . ", " # ", " . ", " . "},
{" # ", " # ", " # ", " # ", " . ", " # ", " . ", " # ", " . ", " # ", " . ", " # "},
{" # ", " . ", " . ", " # ", " . ", " # ", " . ", " # ", " . ", " # ", " . ", " # "},
{" # ", " # ", " . ", " # ", " . ", " # ", " . ", " # ", " . ", " # ", " . ", " # "},
{" # ", " . ", " . ", " . ", " . ", " . ", " . ", " . ", " . ", " # ", " . ", " # "},
{" # ", " # ", " # ", " # ", " # ", " # ", " . ", " # ", " # ", " # ", " . ", " # "},
{" # ", " . ", " . ", " . ", " . ", " . ", " . ", " # ", " . ", " . ", " . ", " # "},
{" # ", " # ", " # ", " # ", " # ", " # ", " # ", " # ", " # ", " # ", " # ", " # "}};
int startingLocation = 59;
mazeTraverse(labyrinth, startingLocation);
return 0;
}
void mazeTraverse(char *maze[][12], int position)
{
int y, x, exCounter, inCounter;
y = position / 12;
x = position % 12;
maze[y][x] = " x ";
for (exCounter = 0; exCounter <= 11; ++exCounter) {
for (inCounter = 0; inCounter <= 11; ++inCounter)
printf("%s", maze[exCounter][inCounter]);
printf("\n");
}
printf("\n");
printf("Position: %d\n", position);
printf("x: %d, y: %d\n\n", x, y);
if (maze[y - 1][x] == " # " && maze[y][x - 1] != " # ")
mazeTraverse(maze, position - 1);
if (maze[y - 1][x] == " . " && maze[y][x + 1] != " . ")
mazeTraverse(maze, position - 12); // Up until this point everything goes as it should
if (maze[y - 1][x] != " . " && maze[y + 1][x] != " # ") // This if statement is the root of the problem
mazeTraverse(maze, position + 12);
}我还没有写完这个函数,我也不想要一个解决方案。如果你执行这段代码,你会注意到探路者在第一个左转弯后向下,直到它遇到一个" # ",然后它从41号广场跳到34号广场,它在最右边的隧道内,并从那里开始下降。我尝试在mazeTraverse中重新构造第三个if语句,但它总是跳到34、46或70的平方。为什么它会跳跃?它是怎么做到的?如何防止这种情况发生?
发布于 2020-06-21 04:50:01
也许下一代的C语言学习者会需要这个。下面是一段使函数正常工作的if语句。显然,我的问题的答案是把return放在每个递归调用的前面。
if (maze[y - 1][x] != " . " && maze[y][x - 1] == " . ")
return mazeTraverse(maze, position - 1);
if (maze[y - 1][x] != " . " && maze[y + 1][x] != " # ")
return mazeTraverse(maze, position + 12);
if (maze[y + 1][x] == " # " && maze[y][x - 1] != " . " && maze[y][x + 1] != " # ")
return mazeTraverse(maze, position + 1);
if (maze[y - 1][x] == " . ")
return mazeTraverse(maze, position - 12);https://stackoverflow.com/questions/62486880
复制相似问题