Распечатать путь, по которому путник может выйти из лабиринта, если выход существует
Лабиринт задан в виде прямоугольной матрицы, в которой используются такие обозначения: 0 - возможен проход, 1 - стена. Даны координаты позиции путника в лабиринте. Распечатать путь, по которому путник может выйти из лабиринта, если выход существует. Считается, что путник вышел из лабиринта, если он находится на первом или последнем строке матрицы, или на первом или последнем столбце. Путник может двигаться только по горизонтали или по вертикали.
Есть часть кода, помогите закончить правильно.
#include <iostream>
#include <cstdlib>
using namespace std;
const int A = 5;
const int B = 5;
enum {Vniz, Vpravo, Nikuda};
bool isvniz(int, int, int[][B]);
bool isvpravo(int, int, int[][B]);
bool NaytiPutj(int, int, int[][B], char* );
int main()
{
int Labirint[A][B] = {
{ 0, 0, 0, 1, 0 },
{ 1, 1, 0, 1, 1 },
{ 1, 0, 0, 0, 0 },
{ 0, 0, 0, 1, 1 },
{ 1, 0, 0, 0, 0 }
};
char P[A + B];
memset((void*)P, Nikuda, A + B);
const char* putj[] = { "Vniz", "Vpravo" };
if (NaytiPutj(0, 0, Labirint, P)) {
for (int i = 0; i < A + B && P[i] < Nikuda; i++) {
cout << putj[P[i]] << '\t';
}
}
else {
cout << " Nevosmozhno idti daljshe! ";
}
system("pause");
return 0;
}
bool NaytiPutj(int i, int j, int Labirint[][B], char* P)
{
if (i == A - 1 || j == B - 1) {
return true;
}
bool nashliProxod = false;
if (isvpravo(i, j, Labirint)) {
nashliProxod = NaytiPutj(i, j + 1, Labirint, P);
if (nashliProxod) {
P[i + j] = Vpravo;
}
return nashliProxod;
}
if (!nashliProxod && isvniz(i, j, Labirint)) {
nashliProxod = NaytiPutj(i + 1, j, Labirint, P);
if (nashliProxod) {
P[i + j] = Vniz;
}
return nashliProxod;
}
}