Создать программу, отыскивающую проход по лабиринту - 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; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с массивами и вводом/выводом данных
- Создаем массив размером 10x10, заполняем его значениями
- Инициализируем переменные X, Y, x, y с определенными значениями (для примера, можно считать, что это координаты игрока в лабиринте)
- Создаем функцию MakeList, которая принимает координаты игрока и строку для вывода пути
- В функции MakeList создаем вспомогательную строку st для формирования пути
- Копируем в нее строку из параметра s
- Формируем новую строку st, добавляя к ней
[%d,%d] ->
с координатами игрока - Проверяем, являются ли текущие координаты игрока конечными (X, Y). Если да, то выводим путь и возвращаем 0
- Если нет, то проверяем следующие условия:
- если значение в ячейке 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
- В функции main вызываем функцию MakeList с текущими значениями x, y и пустой строкой (для вывода пути)
- В конце программы вызываем функцию getch для приостановки выполнения программы до нажатия клавиши
- Возвращаем 0, что означает успешный конец работы программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д