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
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Saritura_Calului:
#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;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #337 Saritura_Calului
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #337 Saritura_Calului de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!