我在完成这个程序时遇到问题。任务是使用递归在由X和O组成的迷宫中找到一条路径。可以通过的路径由O指定。迷宫存储为文本文件。
这是一个样本迷宫:
XOXXXXXX
XOXXXXXX
XOOOOXXX
XXXXOXXX
XXXXOOXX
XXXXXOXX
XXXXXOOO
XXXXXXXO
这是我的附加代码。我正在学习我所有的代码,但我不想被告知如何做,我在这里学习:-)。我确实相信我的问题是没有考虑到我刚刚寻找的相同O,但我不是100%确定。谢谢
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int find_path(char maze[8][8], int coorx, int coory);
int main(int argc, char *argv[])
{
char maze[8][8];
int i=0,j=0;
FILE *fp;
fp = fopen(argv[1], "r");
for(i=0;i<9;i++)
for(j=0;j<9;j++)
fscanf(fp,"%c",&maze[i][j]);
fclose(fp);
printf("%c", maze[2][3]);
return 0;
}
int find_path(char maze[8][8], int coorx, int coory)
{
//if((maze[coorx][coory]!= 'O') && (coorx >=0) && (coorx < 8) && (coory >=0) &&
//(coorx < 8)){
if(find_path(maze, coorx + 1, coory) == 'O'){
printf("(%d,%d)",coorx, coory);
}
else if(find_path(maze, coorx - 1, coory) == 'O'){
printf("(%d,%d)",coorx, coory);
}
else if(find_path(maze, coorx, coory + 1) == 'O'){
printf("(%d,%d)",coorx, coory);
}
else if(find_path(maze, coorx, coory - 1) == 'O'){
printf("(%d,%d)",coorx, coory);
}
return 0;
}
您有这个声明
char maze[8][8];
像这样的循环
for(i=0;i<9;i++)
也就是说,您从零循环到八个(包括八个),即九个索引。对于只有八个条目的数组。
这意味着您将写出超出数组边界的内容,从而导致未定义的行为。
要么更改循环条件,要么增加数组大小。
find_path
没有明确的基本情况,因为开头的if
被注释掉了。它做的第一件事,就是用右边的细胞再次呼叫自己。这个调用所做的第一件事,就是再次调用它自己,在它右边的单元格。没有什么能阻止它从阵列的末端掉下来,在这一点上,你没有让导弹在某个地方发射只是运气不好。
即使不是这样,也没有什么能阻止它卡在右边有墙的牢房和左边的牢房之间。你试图向右走,但不行,所以你向左走。下一步,你可以再次向右走,你也可以。永远重复(或者至少直到你吃掉你的堆栈)。