Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*** P1 -
- *Fiind data o tabla de sah de dimensiunea nxn si un cal in coltul stanga sus al acesteia,
- se cere sa se afiseze toate posibilitatile de mutare a acestei piese de sah astfel incat
- sa treaca o singura data prin fiecare patrat al tablei.
- O solutie va fi afisata ca o matrice nxn in care sunt numerotate sariturile calului.
- *Exemplu, pentru n=5, o solutie este
- *1 14 9 20 23
- *10 19 22 15 8
- *5 2 13 24 21
- *18 11 4 7 16
- *3 6 17 12 25
- *calul este asezat random
- ***/
- #include<fstream>
- #include<iostream>
- #include <stdlib.h>
- #include<time.h>
- using namespace std;
- const int dx[8]= {0, 1, 1, 1, 0,-1,-1,-1};
- const int dy[8]= {1, 1, 0,-1,-1,-1, 0, 1};
- int a[8][8],n;
- ofstream f("rege.out");
- void afis() {
- int i,j;
- for(i=1; i<=n; i++) {
- for(j=1; j<=n; j++)
- f<<a[i][j]<<" ";
- f<<endl;
- }
- f<<endl;
- }
- int inside(int i,int j) {
- return i>=1 && i<=n && j>=1 && j<=n;
- }
- void back(int i, int j, int nrPas) { ///nrPas merge pana la final( pozitia n*n)
- int k,inou,jnou;
- a[i][j]=nrPas;
- if (nrPas==n*n)
- afis();
- else
- for(k=0; k<8; k++) {
- inou=i+dx[k];
- jnou=j+dy[k];
- if (inside(inou,jnou) && a[inou][jnou]==0)
- back(inou,jnou,nrPas+1);
- }
- a[i][j]=0;///in cazul in care nu s a reusit mutarea, casuta redevine 0, altfel ar fi fost nrPas+1...;
- }
- int main() {
- cout<<"dati n: ";
- cin>>n;
- for(int i=1; i<=n; i++) {
- for(int j=1; j<=n; j++) {
- a[i][j]=0;
- }
- }
- srand(time(NULL));
- int i=1+rand()%n;
- int j=1+rand()%n;
- back(i,j,1);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement