Advertisement
madalinaradu

ASD Pb1 cal

May 26th, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.65 KB | None | 0 0
  1. /*** P1 -
  2. *Fiind data o tabla de sah de dimensiunea nxn si un cal in coltul stanga sus al acesteia,
  3. se cere sa se afiseze toate posibilitatile de mutare a acestei piese de sah astfel incat
  4. sa treaca o singura data prin fiecare patrat al tablei.
  5. O solutie va fi afisata ca o matrice nxn in care sunt numerotate sariturile calului.
  6. *Exemplu, pentru n=5, o solutie este
  7. *1 14 9 20 23
  8. *10 19 22 15 8
  9. *5 2 13 24 21
  10. *18 11 4 7 16
  11. *3 6 17 12 25
  12. *calul este asezat random
  13. ***/
  14. #include<fstream>
  15. #include<iostream>
  16. #include <stdlib.h>
  17. #include<time.h>
  18. using namespace std;
  19.  
  20. const int dx[8]= {0, 1, 1, 1, 0,-1,-1,-1};
  21. const int dy[8]= {1, 1, 0,-1,-1,-1, 0, 1};
  22.  
  23. int a[8][8],n;
  24. ofstream f("rege.out");
  25.  
  26. void afis() {
  27.     int i,j;
  28.     for(i=1; i<=n; i++) {
  29.         for(j=1; j<=n; j++)
  30.             f<<a[i][j]<<"     ";
  31.         f<<endl;
  32.     }
  33.     f<<endl;
  34. }
  35.  
  36. int inside(int i,int j) {
  37.     return i>=1 && i<=n && j>=1 && j<=n;
  38. }
  39.  
  40. void back(int i, int j, int nrPas) { ///nrPas merge pana la final( pozitia n*n)
  41.     int k,inou,jnou;
  42.     a[i][j]=nrPas;
  43.     if (nrPas==n*n)
  44.         afis();
  45.     else
  46.         for(k=0; k<8; k++) {
  47.             inou=i+dx[k];
  48.             jnou=j+dy[k];
  49.             if (inside(inou,jnou) && a[inou][jnou]==0)
  50.                 back(inou,jnou,nrPas+1);
  51.         }
  52.     a[i][j]=0;///in cazul in care nu s a reusit mutarea, casuta redevine 0, altfel ar fi fost nrPas+1...;
  53. }
  54.  
  55. int main() {
  56.     cout<<"dati n: ";
  57.     cin>>n;
  58.     for(int i=1; i<=n; i++) {
  59.         for(int j=1; j<=n; j++) {
  60.             a[i][j]=0;
  61.         }
  62.     }
  63.     srand(time(NULL));
  64.     int i=1+rand()%n;
  65.     int j=1+rand()%n;
  66.     back(i,j,1);
  67.     return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement