Rezolvare completă PbInfo #337 Saritura_Calului

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 Adresa de email.

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!