Advertisement
meditor

queen8Nsa

Sep 7th, 2017
784
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.06 KB | None | 0 0
  1. //----------------------------------------------------------------------------------------------
  2. // Meditor Digital Strategies since 1989.      
  3. // www.meditor.hu * meditor_at_meditor_dot_hu  
  4. // This file : queenNsa.c                      
  5. // Created by: Végvári Lajos                    
  6. // Date      : 2017-sep-07 + 09:24:57          
  7. //----------------------------------------------------------------------------------------------
  8. // >> Sol omnibus lucet                        
  9. //----------------------------------------------------------------------------------------------
  10.  
  11. #define     NUMBER_OF_QUEENS    8
  12.  
  13. //----------------------------------------------------------------------------------------------
  14.  
  15. #include    <stdio.h>
  16. #include    <stdlib.h>
  17. #include    <signal.h>
  18.  
  19. //----------------------------------------------------------------------------------------------
  20.  
  21. int                     PermuArray[NUMBER_OF_QUEENS];
  22. unsigned long long int  PermuCount;
  23. unsigned long long int  DancingQueen;
  24.  
  25. //----------------------------------------------------------------------------------------------
  26. //----------------------------------------------------------------------------------------------
  27.  
  28. unsigned int IsItDancingQueen(void)
  29.     {unsigned int   ok;
  30.      int            i,j;
  31.      int            dif_ndx,dif_permu;
  32.  
  33.      ok=0;
  34.  
  35.      i=0;while(i<NUMBER_OF_QUEENS)
  36.      {j=i+1;while(j<NUMBER_OF_QUEENS)
  37.       {
  38.        dif_ndx      = i-j;
  39.        dif_permu    = PermuArray[i]-PermuArray[j];
  40.        if(abs(dif_ndx)==abs(dif_permu))goto iidq_ext;
  41.        j++;
  42.       }
  43.       i++;
  44.      }ok++;
  45.  
  46. iidq_ext:;
  47.      
  48.      return(ok);
  49.     }
  50.  
  51. //----------------------------------------------------------------------------------------------
  52.  
  53. void PermuCheck(void)
  54.     {unsigned int   i;
  55.  
  56.      if(IsItDancingQueen())
  57.      {
  58.       i=0;while(i<NUMBER_OF_QUEENS){printf("%3d",PermuArray[i]);i++;}printf("\n");
  59.       DancingQueen++;
  60.      }
  61.  
  62.      PermuCount++;
  63.     }
  64. //----------------------------------------------------------------------------------------------
  65. //----------------------------------------------------------------------------------------------
  66.  
  67. void RS_permutation(unsigned int first_ndx)
  68.     {unsigned int   i;
  69.      unsigned int   tmpui;
  70.  
  71.      if(first_ndx==NUMBER_OF_QUEENS)PermuCheck();
  72.  
  73.      else
  74.      {i=first_ndx;while(i<NUMBER_OF_QUEENS)
  75.       {
  76.        // swap
  77.        tmpui=PermuArray[first_ndx];PermuArray[first_ndx]=PermuArray[i];PermuArray[i]=tmpui;
  78.        RS_permutation(first_ndx+1);
  79.        //swap
  80.        tmpui=PermuArray[first_ndx];PermuArray[first_ndx]=PermuArray[i];PermuArray[i]=tmpui;
  81.        i++;
  82.       }
  83.      }
  84.     }
  85.  
  86. //----------------------------------------------------------------------------------------------
  87. //----------------------------------------------------------------------------------------------
  88.  
  89. void queen_exit(void)
  90.     {
  91.      exit(0);
  92.     }
  93.  
  94. //----------------------------------------------------------------------------------------------
  95.  
  96. void IntBreak(void)
  97.     {char       msg[]="! ^C detected: user interrupt.\n";
  98.      printf(msg);
  99.      queen_exit();
  100.     }
  101.  
  102. //----------------------------------------------------------------------------------------------
  103.  
  104. void TermBreak(void)
  105.     {char       msg[]="  - TERM signal detected.\n";
  106.      printf(msg);
  107.      queen_exit();
  108.     }
  109.    
  110. //----------------------------------------------------------------------------------------------
  111.  
  112. void NormalExit(void)
  113.     {char       msg[]="  - Normal shutdown.\n";
  114.      printf(msg);
  115.      queen_exit();
  116.     }
  117.  
  118. //----------------------------------------------------------------------------------------------
  119. //----------------------------------------------------------------------------------------------
  120.  
  121. int main (int argc,char *argv[])
  122.     {unsigned int   i;
  123.  
  124.      signal(SIGINT,(void*)&IntBreak);               // set signals
  125.      signal(SIGTERM,(void*)&TermBreak);
  126.  
  127.      PermuCount=DancingQueen=0;
  128.      i=0;while(i<NUMBER_OF_QUEENS){PermuArray[i]=i;i++;}
  129.      RS_permutation(0);
  130.  
  131.      NormalExit();
  132.      return(0);
  133.     }
  134.  
  135. //----------------------------------------------------------------------------------------------
  136. // End of file.                                
  137. //----------------------------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement