Написать программу выхода из лабиринта - 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;
}

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

  1. В начале программы открывается файл input.txt для чтения данных о лабиринте.
  2. Программа считывает длину лабиринта N x N с помощью переменной N.
  3. Создается двумерный массив a размером N+2xN+2 для представления лабиринта.
  4. Четыре переменные start_x, start_y, end_x, end_y инициализируются координатами начала и конца пути в лабиринте.
  5. Переменные start_x, start_y, end_x, end_y инициализируются значениями клеток лабиринта, помеченных как начало или конец пути.
  6. Если значение клетки равно -2, то это считается концом пути.
  7. Если значение клетки равно -1, то это считается стеной.
  8. Используя цикл while, программа проверяет, достигла ли она конца пути, и если нет, то увеличивает значение переменной value и проходит по всем клеткам на пути, увеличивая их значения на 1.
  9. Если значение переменной value равно значению какой-либо клетки, то программа увеличивает значение каждой соседней клетки на 1.
  10. После завершения цикла, программа выводит значение переменной value и ожидает нажатия клавиши для выхода из программы.

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


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

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

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