Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<conio.h>
- #include<iomanip>
- using namespace std;
- const int dl[9]={0,-2,-1,1,2,2,1,-1,-2};
- const int dc[9]={0,1,2,2,1,-1,-2,-2,-1};
- struct patratel
- {
- int l,c;
- }x[100];
- int d[100],n, nrsol=0;
- void init(int k){
- d[k]=0;
- }
- int existasuccesor(int k){
- return d[k]<8;
- }
- void valoriposibile(int k){
- x[k].l=x[k-1].l+dl[d[k]];
- x[k].c=x[k-1].c+dc[d[k]];
- }
- int estevalid(int k){
- if(x[k].l<1 || x[k].l>n || x[k].c<1 || x[k].c>n) return 0;
- for(int i=1;i<k;i++)
- if(x[i].l==x[k].l && x[i].c==x[k].c) return 0;
- return 1;
- }
- int solutie(int k){
- return k==n*n;
- }
- void tipar(){
- nrsol++;
- for(int i=1;i<=n;i++)
- {
- for(int j=1;j<=n;j++)
- for(int k=1;k<=n*n;k++)
- if(x[k].l==i && x[k].c==j)
- cout<<setw(2)<<k<<" ";
- cout<<endl;
- }
- cout<<endl<<endl;
- //getch();
- }
- void back(){
- x[1].l=1;x[1].c=1;
- int k=2;
- init(2);
- while(k>1)
- if(existasuccesor(k)) {
- d[k]++;
- valoriposibile(k);
- if(estevalid(k))
- if(solutie(k)) tipar();
- else
- {
- k++;
- init(k);
- }
- }
- else k--;
- }
- int main()
- {
- cout<<"n=";cin>>n;
- back();
- cout<<"Sunt "<<nrsol<<" solutii.";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement