Создать программу, отыскивающую проход по лабиринту - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Создать программу на СИ, отыскивающую проход по лабиринту. Лабиринт представляется в виде матрицы, состоящей из квадратов. Каждый квадрат либо открыт, либо закрыт. Вход в закрытый квадрат запрещен. Если квадрат открыт, то вход в него возможен со стороны, но не с угла. Каждый квадрат определяется его координатами в матрице. Программа находит проход через лабиринт, двигаясь от заданного входа. После отыскания прохода программа выводит найденный путь в виде координат квадратов. Для хранения пути использовать стек.
Помогите пожалуйста!
Понятию не имею, как это написать((((

Решение задачи: «Создать программу, отыскивающую проход по лабиринту»

textual
Листинг программы
#include <string.h>
#include <stdio.h>
#include <conio.h> 
int mas[10][10]={
 1,1,0,1,1,1,1,1,1,1
,1,1,0,1,1,1,1,1,1,1
,1,1,0,0,1,0,0,0,1,1
,1,1,1,0,0,0,1,0,1,1
,1,0,1,1,1,0,0,0,1,1
,1,0,0,0,0,0,1,1,1,1
,1,1,1,1,1,0,1,1,1,1
,1,1,1,1,1,0,0,0,1,1
,1,1,1,1,1,1,1,1,1,1
,1,1,1,1,1,1,1,1,1,1};
 
int X=5, Y=1, x=2, y=2;
 
int MakeList(int x, int y, char s[1000])
{
    char st[1000];
    strcpy(st,s);
    sprintf (st, "%s[%d,%d] -> ", st, x, y);
    if (x==X && y==Y)
    {
        printf("%s\n\n",st);
        return 0;
    }
    if (x > 0) if (mas[x - 1][y] == 0) {mas[x][y]+=3; MakeList(x-1, y, st); mas[x][y]-=3;}
    if (x < 9) if (mas[x + 1][y] == 0) {mas[x][y]+=3; MakeList(x+1, y, st); mas[x][y]-=3;}
    if (y > 0) if (mas[x][y - 1] == 0) {mas[x][y]+=3; MakeList(x, y-1, st); mas[x][y]-=3;}
    if (y < 9) if (mas[x][y + 1] == 0) {mas[x][y]+=3; MakeList(x, y+1, st); mas[x][y]-=3;}
}
 
int main()
{
    MakeList(x, y, "");
    getch();
    return 0;
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы для работы с массивами и вводом/выводом данных
  2. Создаем массив размером 10x10, заполняем его значениями
  3. Инициализируем переменные X, Y, x, y с определенными значениями (для примера, можно считать, что это координаты игрока в лабиринте)
  4. Создаем функцию MakeList, которая принимает координаты игрока и строку для вывода пути
  5. В функции MakeList создаем вспомогательную строку st для формирования пути
  6. Копируем в нее строку из параметра s
  7. Формируем новую строку st, добавляя к ней [%d,%d] -> с координатами игрока
  8. Проверяем, являются ли текущие координаты игрока конечными (X, Y). Если да, то выводим путь и возвращаем 0
  9. Если нет, то проверяем следующие условия:
    • если значение в ячейке mas[x-1][y] равно 0, то увеличиваем значение в этой ячейке на 3 (предполагаем, что это ход влево), вызываем рекурсивно функцию MakeList с уменьшенным на 1 значением x и текущими значениями y, затем уменьшаем значение в ячейке на 3
    • если значение в ячейке mas[x+1][y] равно 0, то увеличиваем значение в этой ячейке на 3 (предполагаем, что это ход вправо), вызываем рекурсивно функцию MakeList с увеличенным на 1 значением x и текущими значениями y, затем уменьшаем значение в ячейке на 3
    • если значение в ячейке mas[x][y-1] равно 0, то увеличиваем значение в этой ячейке на 3 (предполагаем, что это ход вверх), вызываем рекурсивно функцию MakeList с текущими значениями x и уменьшенным на 1 значением y, затем уменьшаем значение в ячейке на 3
    • если значение в ячейке mas[x][y+1] равно 0, то увеличиваем значение в этой ячейке на 3 (предполагаем, что это ход вниз), вызываем рекурсивно функцию MakeList с текущими значениями x и увеличенным на 1 значением y, затем уменьшаем значение в ячейке на 3
  10. В функции main вызываем функцию MakeList с текущими значениями x, y и пустой строкой (для вывода пути)
  11. В конце программы вызываем функцию getch для приостановки выполнения программы до нажатия клавиши
  12. Возвращаем 0, что означает успешный конец работы программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.714 из 5
Похожие ответы