使用递归来查找2D迷宫路径。 Seg Faulting。 C

时间:2013-12-03 07:26:16

标签: c recursion segmentation-fault maze

我无法完成此计划。赋值是使用递归来找到通过由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;
    }

2 个答案:

答案 0 :(得分:1)

你有这个声明

char maze[8][8];

像这样循环

for(i=0;i<9;i++)

也就是说,从0到8(包括)循环,这是 9 索引。对于只有八个条目的数组。

这意味着你将写出数组的界限,导致未定义的行为。

更改循环条件或增加数组大小。

答案 1 :(得分:0)

find_path没有明确的基本情况,因为开头的if已被注释掉。它做的第一件事就是用右边的单元格再次调用自己。而调用的第一件事就是再次调用自己,右边是单元格。没有什么可以阻止它从阵列末端直接落下,此时只是运气不好,你没有让导弹在某个地方发射。

即使情况并非如此,也没有什么能阻止它被卡在右边有一个墙的单元格和它左边的单元格之间。你试着向右走,但不能走,所以你走了。下一步,您可以再次向右走,这样就可以了。重复所有永恒(或至少直到你吃掉你的筹码)。