Написать программу выхода из лабиринта - C (СИ)
Формулировка задачи:
В текстовом файле сохранено лабиринт. Написать программу выхода из лабиринта
Народ, помагите пожалуйста, можна на С, или на Pascal!!!!! Оч-оч надо....
Решение задачи: «Написать программу выхода из лабиринта»
textual
Листинг программы
#include "stdafx.h" #include <iostream> #include <fstream> int _tmain(int argc, _TCHAR* argv[]) { std::ifstream in("input.txt"); //лабиринт находится тут int N; in>>N; //считываем длину лабиринта N x N int **a=new int*[N+2]; for(int i=0;i<N+2;i++)a[i]=new int[N+2]; //создаем двумерный массив, для удобства от 1 до n; +2, чтобы за пределы массива на выходить в while() int start_x,start_y,end_x,end_y; //координаты for(int i=1;i<=N;i++) for(int j=1;j<=N;j++){ in>>a[i][j]; if(a[i][j]==1){ //единица - признак старта, всего должна быть одна start_x=i; start_y=j; } if(a[i][j]==-2){ //двойка - признак конца, всего должна быть одна end_x=i; end_y=j; } } //в моем файле -1 это стенки, поэтому дальше идет проверка, если возле финиша какая-то клетка больше нуля - следственно мы дошли и можем сказать ответ int value=0; //число, которое присваиваем клетке массива while((a[end_x+1][end_y]<1)&&(a[end_x-1][end_y]<1)&&(a[end_x][end_y+1]<1)&&(a[end_x][end_y-1]<1)){ //сама проверка, описанная выше value++; for(int i=1;i<=N;i++) for(int j=1;j<=N;j++) if(a[i][j]==value){ //если клетка равна переменной все соседние клетки делаем на 1 больше if((!a[i][j-1])a[i][j-1]=value+1; if(!a[i][j+1])a[i][j+1]=value+1; if(!a[i-1][j])a[i-1][j]=value+1; if(!a[i+1][j])a[i+1][j]=value+1; } } std::cout<<value+1; system("pause"); return 0; }
Объяснение кода листинга программы
- В начале программы открывается файл
input.txt
для чтения данных о лабиринте. - Программа считывает длину лабиринта N x N с помощью переменной N.
- Создается двумерный массив a размером N+2xN+2 для представления лабиринта.
- Четыре переменные start_x, start_y, end_x, end_y инициализируются координатами начала и конца пути в лабиринте.
- Переменные start_x, start_y, end_x, end_y инициализируются значениями клеток лабиринта, помеченных как начало или конец пути.
- Если значение клетки равно -2, то это считается концом пути.
- Если значение клетки равно -1, то это считается стеной.
- Используя цикл while, программа проверяет, достигла ли она конца пути, и если нет, то увеличивает значение переменной value и проходит по всем клеткам на пути, увеличивая их значения на 1.
- Если значение переменной value равно значению какой-либо клетки, то программа увеличивает значение каждой соседней клетки на 1.
- После завершения цикла, программа выводит значение переменной value и ожидает нажатия клавиши для выхода из программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д