Помогите реализовать процедуру поиска выхода из лабиринта С++

программы C++ алгоритмы

Лабиринт - двумерный массив сгенерированный случайным образом размером MxN. Состав: 1 - стенка, 0 - ход свободен.
Пользователь, задает координаты входа ENTER_X, ENTER_Y и выхода EXIT_X, EXIT_Y. Процедура должна отыскать любой реальный способ "дойти" от входа к выходу. Результат заносится в виде координат пути в массив структур struct Coord Way[Steps]; Где Coords struct {int x; int y; } ; Steps - количество верных шагов

Примечание:
Простите, не хватает ума сделать эту функцию.. Не математик я и не шахматист - не могу придумать простого алгоритма..

Вот то что у меня есть на данный момент:

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>


using namespace std;

// Global variables


int SIZE_X;
int SIZE_Y; // Size of Maze Matrix

int ENTER_X; // Coordinats of Enter
int ENTER_Y;

int EXIT_X; // Coordinate of Exit
int EXIT_Y;

int Maze[100][100]; // Matrix of Maze

int Rnd;
int Done=0;
int Start=0;

int CurX;
int CurY;

int LastX;
int LastY;

int Steps=0;




// Structure for output array

struct gps
{
int Xc;
int Yc;

} ;

struct gps Output_way[100]; // Output array

struct gps Way[100];



// Functions utility


int getrand (int toprange)
{

return (rand () % toprange) + 1;
}





// Program procedures

void CreateMaze()
{

for (int x=1; x<=SIZE_X; x++)
{


for ( int y=1; y<=SIZE_Y; y++)

{


if (getrand(2)<2) { Maze[x][y]=1 ;} else { Maze[x][y]=0;}

// Enter-Exit can not be on the diagonal:

if ((x==1 && y==1) || (x==SIZE_X && y==1) || (x==1 && y==SIZE_Y) || (x==SIZE_X && y==SIZE_Y) ) {Maze[x][y]=1;}


}




}



}

void ShowMaze()
{
for (int y=1; y<=SIZE_Y; y++)
{


for ( int x=1; x<=SIZE_X; x++)

{

cout<<Maze[x][y]<<" ";
if (x==(SIZE_X)) { cout<<"\n"<<endl;}



}

}



}


bool IsFree(int X,Y)
{
bool free;
if (Maze[X][Y]==0) {free=true;} else {free=false;}

return free;
}



void FindWay()
{


// ???



}








int main()
{
srand (time (NULL));

cout<<"Input X size of Maze ";
cin>>SIZE_X;
cout<<"Input Y size of Maze ";
cin>>SIZE_Y;
cout<<" \n"<<endl;
CreateMaze();
ShowMaze();

cout<<"Input X coordinate of enter ";
cin>>ENTER_X;
cout<<"Input Y coordintate of enter ";
cin>>ENTER_Y;

cout<<"\n"<<endl;

cout<<"Input X coordinate of exit ";
cin>>EXIT_X;
cout<<"Input Y coordintate of exit ";
cin>>EXIT_Y;

cout<<"Finding way... \n"<<endl;

FindWay();

cout<<"Done... \n"<<endl;

}
Ответы:
Ну и в чём проблема? Делай обход графа. Если размер не слишком большой, делай dfs рекурсией, потому что пишется нахаляву. Если же вложенность рекурсии окажется слишком большой, то делай bfs или dfs без рекурсии, что больше нравится.


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.