Sunteți pe pagina 1din 2

#include <iostream>

#include <cstdlib>
#include <ctime>
#include <windows.h>
#include <iomanip>
using namespace std;
/*
Se citete de la tastatura ordinul m*n al unui labirint care se va implementa
binar cu valori aleatoare.
0 = culoar;
1 = zid;
Un prizonier se afl n poziia (l0,c0) (unde se gaseste valoarea 0).
Determinai toate modalitile de a prsi labirintul.
*/
bool margine (int l, int c, int m, int n)
{
if (l==1 || c==1 || l==m || c==n) return true;
else return false;
}
void tipar (int m, int n)
{
gasit = true;
cout << endl;
HANDLE consola = GetStdHandle (STD_OUTPUT_HANDLE);
int i, j;
for (i = 1; i <= m; i ++)
{
for (j = 1; j <= n; j ++)
{
if (a[i][j] > 1 || i == l0 && j == c0) SetConsoleTextAttribute
(consola, 11);
else SetConsoleTextAttribute (consola, 7);
cout << setw (3) << a[i][j];
}
cout<<endl;
}
}
void labirint (int l, int c, int pas, int m, int n)
{
int l1, c1, i;
for (i = 1; i <= 4; i ++) // 4 variante de deplasare a prizonierului
{
l1 = l + lin[i]; // (l1, c1) = pozitia unde dorete s se deplaseze
prizonierul
c1 = c + col[i];
if (a[l1][c1] == 0)
{
a[l1][c1] = pas + 1;
if (margine (l1, c1, m, n) ) tipar(m,n);
else labirint (l1, c1, pas+1, m, n);
a[l1][c1] = 0; // rectificm drumul cu 0 att pentru un blocaj al
drumului, ct i pentru o soluie
}
}
}
int main()
{
int m, n, i, j;
cout << "Dai un numr de linii i de coloane";
cin >> m >> n;
srand (time (NULL) ); // seteaz smna de generare a numerelor aleatoare cu
ora sistemului;
for(i = 1; i <= m; i ++)
{
for(j = 1; j <= n; j ++)
{
a[i][j] = rand () % 2;
cout << a[i][j] << " ";
}
cout<<endl;
}
cout << "Dai linia i coloana unde se afl prizonierul";
cin>>l0>>c0;
if (a[l0][c0] == 1)
{
cout << "Date eronate ";
return -1;
}
if (margine (l0, c0, m, n) )
{
cout << "Soluie evident ";
return -2;
}
a[l0][c0] = 1;
labirint (l0, c0, 1, m, n); // 1 = pasul curent al prizonierului;
if (gasit == false) cout<<"Nu are cale de scapare ";
}

S-ar putea să vă placă și