Advertisement
Alhiris

Bkt iterativ

Dec 15th, 2018
223
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.72 KB | None | 0 0
  1. #include <fstream>
  2. std::ifstream cin("damesah.in");
  3. std::ofstream cout("damesah.out");
  4. #define maxn 14
  5.  
  6. int v[maxn],row[maxn],diagPrin[maxn*2],diagSec[maxn*2];
  7. int n,nrsol;
  8.  
  9. bool valid(int x,int y,int z){
  10.     return (!row[x]&&!diagSec[y]&&!diagPrin[z]);
  11. }
  12.  
  13. void bkt(){
  14.     int k=1;
  15.     while(k>0){
  16.         int eSol=0;
  17.         while(v[k]<n&&!eSol){
  18.             v[k]++;
  19.             eSol=valid(v[k],k+v[k],n-v[k]+k-1);
  20.         }
  21.         if(!eSol){
  22.             k--;
  23.             row[v[k]]=diagSec[k+v[k]]=diagPrin[n-v[k]+k-1]=0;
  24.             continue;
  25.         }
  26.         if(k==n){
  27.             if(!nrsol)
  28.                 for(int i=1;i<=n;i++)
  29.                     cout<<v[i]<<' ';
  30.             nrsol++;
  31.         }else{
  32.             row[v[k]]=diagSec[k+v[k]]=diagPrin[n-v[k]+k-1]=1;
  33.             v[++k]=0;
  34.         }
  35.     }
  36. }
  37.  
  38. int main()
  39. {
  40.     cin>>n;
  41.     bkt();
  42.     cout<<'\n'<<nrsol;
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement