Cerința
Se dă o tablă de șah formată din n
linii și m
coloane, definind n*m
zone, unele dintre ele fiind libere, altele conținând piese, mai precis: un cal, nebuni și pioni. Calul este codificat prin cifra 2
, pionii prin 1
, nebunii prin 3
, iar pozițiile libere prin 0
. Calul care se poate deplasa pe tablă prin salturi de forma literei L
, exact ca la șah (doi pași pe o direcție și un pas pe cealaltă direcție, perpendiculară), fără a părăsi tabla, fără a trece prin zone care conțin nebuni și fără a trece de două ori prin aceeași zonă.
Determinați în câte moduri poate lua calul toți pionii și care este numărul minim de salturi pentru acest lucru, știind că salturile calului se opresc în momentul în care ia ultimul pion.
Date de intrare
Fişierul de intrare cal_xi.in
conţine pe prima linie numerele n m
, separate printr-un spațiu. Următoarele n
linii conțin câte m
valori, care descriu tabla: cifra 0
corespunde unei zone libere, cifra 1
corespunde unei zone ocupate de un pion, unica cifră 2
corespunde zonei ocupate de cal, iar cifra 3
corespunde unei zone ocupate de un nebun. Cele n*m
cifre sunt separate prin spații.
Date de ieşire
Fişierul de ieşire cal_xi.out
va conţine, separate prin exact un spațiu, numărul moduri poate lua calul toți pionii și care este numărul minim de salturi pentru acest lucru. Dacă nu există niciun traseu prin care calul să ia toții pionii de pe tablă, atunci se va afișa mesajul IMPOSIBIL
.
Restricţii şi precizări
1 ≤ n,m ≤ 10
- zona în care se află calul este unică
- pe tablă exisță cel puțin un pion
- traseul calului se termină atunci când ia ultimul pion
- calul nu poate trece de două ori prin aceeași zonă.
- calul nu poate trece prin zone ocupate de nebuni.
Exemplu:
cal_xi.in
4 5 3 3 0 0 3 0 3 1 0 3 2 0 0 0 3 0 3 0 1 0
cal_xi.out
3 2
Explicație:
Cele 3 trasee sunt:
0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 0 0 3 0
0 0 7 0 0 6 0 10 3 0 1 8 5 0 0 0 0 2 9 4
0 0 0 0 0 0 0 6 3 0 1 4 0 0 0 0 0 2 5 0
Traseul cel mai scurt necesită două salturi ale calului: din (3,1) în (2,3) și apoi în (4,4).