Documente Academic
Documente Profesional
Documente Cultură
6 7 – dimensiunile
4 1 – coordonatele de pornire în matrice
2 6 – coordonatele de sosire în matrice
o succesiune de 0, reprezintă o cale liberă, 1 reprezentând obstacolele
labirint.in labirint.out
6 7 8
0 0 0 0 0 0 0
0 1 1 1 1 0 0
0 0 0 0 1 1 0
0 1 1 0 1 0 0
0 1 1 0 1 0 1
0 0 0 0 0 0 0
4 1
2 6
Nord: (-1, 0)
Est: (0, +1)
Sud: (+1, 0)
Vest: (0, -1)
Această deplasare poate fi exprimată prin doi vectori dl[] – deplasare pe linie și dc[] –
deplasare pe coloană, astfel :
Direcții : N E S V
#include <bits/stdc++.h>
#define Dim 15
using namespace std;
int n, m, i, j, A[Dim][Dim], nr, xi, yi, xf, yf, sol;
const int dl[4] = {-1, 0, 1, 0};
const int dc[4] = {0, 1, 0, -1};
void backplan(int x, int y, int k)
{
int i, xx, yy;
if(x == xf && y == yf)
sol ++;
else
for(i = 0; i < 4; i ++)
{
xx = x + dl[i];
yy = y + dc[i];
if(!A[xx][yy])
{
A[xx][yy] = k;
backplan(xx, yy, k + 1);
A[xx][yy] = 0;
}
}
}
int main()
{
ifstream f("labirint.in");
ofstream g("labirint.out");
f >> n >> m;
for(i = 1; i <= n; i ++)
for(j = 1; j <= m; j ++)
f >> A[i][j];
for(i = 0; i <= n + 1; i ++)
A[i][0] = A[i][m + 1] = 1;
for(i = 0; i <= m + 1; i ++)
A[0][i] = A[n + 1][i] = 1;
f >> xi >> yi >> xf >> yf;
A[xi][yi] = 1;
backplan(xi, yi, 2);
g << sol;
return 0;
}