Получение ошибки сегментации (сбрасывается ядро) при поиске в моем двумерном массиве - PullRequest
2 голосов
/ 05 марта 2020

Я работаю над фрагментом кода, где робот рекурсивно просматривает лабиринт, чтобы найти правильный путь до конца. Я считаю, что я правильно реализовал рекурсивную функцию, однако, когда я пытаюсь заполнить 2D-массив в своей основной функции, я сталкиваюсь со следующей ошибкой: Ошибка сегментации (ядро сброшено). Я показал мой код ниже. Любая помощь, которую я мог бы получить, была бы полезна. Спасибо!

#include <stdio.h>
#include <string.h>

int isValid(int x, int y)
{
    if(x >= 0 && x <= 6 && y >=0 && y <= 6)
    {
        return 1;
    }
    return 0;
}

    int mazeGo(char maze[6][6], char solution[6][6], int x, int y)
    {
        char mazeFull [6][6] = 
        {
            {'.','#','#','#','#','#'},
            {'.','.','.','.','.','#'},
            {'#','.','#','#','#','#'},
            {'#','.','#','#','#','#'},
            {'.','.','.','#','.','.'},
            {'#','#','.','.','.','#'}
        };

        //checks to sse if the robot is at the goal
        if(x == 5 && y == 4 && isValid(x,y) == 1)
        {
            printf("Maze had been Solved");
            solution[x][y] = '.';
            return 1;
        }

        else if(x != 5 && y != 4 && isValid(x,y) == 1)
        {
            //Robot travels north
            if(mazeGo(mazeFull,solution,x,y-1) == 1)
            {
                solution[x][y] = '.';
                return 1;
            }
            //Robot travels East
            else if(mazeGo(mazeFull,solution,x+1,y) == 1)
            {
                solution[x][y] = '.';
                return 1;
            }
            //Robot travels south
            else if(mazeGo(mazeFull,solution,x,y+1) == 1)
            {
                solution[x][y] = '.';
                return 1;
            }
            //Robot travels west
            else if(mazeGo(mazeFull,solution,x-1,y) == 1)
            {
                solution[x][y] = '.';
                return 1;
            }
            else
            {
                solution[x][y] = '#';
                return 0;
            }

        }
        return 0;
    }


    int main()
    {
      int x = 0;
      int y = 0;
      char solution[6][6];
      char maze [6][6] = 
        {
            {'.','#','#','#','#','#'},
            {'.','.','.','.','.','#'},
            {'#','.','#','#','#','#'},
            {'#','.','#','#','#','#'},
            {'.','.','.','#','.','.'},
            {'#','#','.','.','.','#'}
        };
        if(mazeGo(maze,solution,x,y) == 1)
        {
          for(int r = 0; r < 6; r++)
          {
            for(int c = 0; c < 6; c++)
            {
              printf("%c \n", solution[r][c]);
            }
          }
        }
        /*else
        {
          printf("There is no solution");
        }*/

      return 0;
    }

1 Ответ

1 голос
/ 05 марта 2020

Ваш лабиринт - это массив размером 6x6, который означает, что позиции элементов расположены в [0] [0] - [5] [5].

В вашей функции isValid есть ошибка, когда она разрешает x и у быть равным 6. Попробуйте изменить ниже:

int isValid(int x, int y) {
    return (x >= 0 && x < 6 && y >= 0 && y < 6);
}
...