# PBinfo #337 – Saritura_Calului – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: Darius

## Enunț

Cerinţa
Se consideră o tablă de şah cu n linii şi m coloane. La o poziţie dată se află un cal de şah, acesta putându-se deplasa pe tablă în modul specific acestei piese de şah (în L).

Să se determine o modalitate de parcurgere integrală a tablei de către calul dat, astfel încât acesta să nu treacă de două ori prin aceeaşi poziţie.

Date de intrare
Programul citește de la tastatură numerele n şi m , apoi numere x y, reprezentând dimensiunile tablei (numărul de linii şi numărul de coloane) , respectiv coordonatele iniţiale ale calului (linie, coloana).

Date de ieşire
Programul afișează n linii cu câte m numere naturale cuprinse între 1 și n*m, separate prin exact un spațiu, reprezentând parcurgerea solicitată.

Restricţii şi precizări

1 ≤ n,m ≤ 6
1 ≤ x ≤ n
1 ≤ y ≤ m
pentru fiecare dintre testele propuse, există soluție

Exemplu:
Date de intrare

4 5 1 1
Date de ieșire

1 12 7 16 3 
6 17 2 11 8 
13 10 19 4 15 
18 5 14 9 20

## Cod sursă C++

```cpp
#include <iostream>
using namespace std;
int n,m,istart,jstart;
int a[15][15];
int gasit = 0;
const int di[]={-2,-2,-1,-1,+1,+1,+2,+2},
		  dj[]={-1,+1,-2,+2,-2,+2,-1,+1};
void afis(int n,int m){
	gasit = 1;
	for(int i=1;i<=n;++i){
		for(int j=1;j<=m;++j)
			cout << a[i][j] << " ";
		cout << endl;
	}
}
void back(int i, int j, int pas){
	if(!gasit)
		if(i>0 && j>0 && i<=n && j<=m && a[i][j]==0)
		{
			a[i][j] = pas;
			if(pas == n*m)
				afis(n,m);
			else
				for(int k=0 ; k<8 ; ++k)
					back(i+di[k],j+dj[k],pas+1);
			a[i][j] = 0;
		}
}
int main(){
	cin >> n >> m >> istart >> jstart;
	back(istart,jstart,1);
	return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/337)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/337/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-337/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
