八皇后算法问题

  1. const int num  = 8;/*可以随意修改,num是多少解的就是几皇后问题*/  
  2.       int arr[num];  
  3.       int count =0;  
  4. void display()/*一个简单的数组输出函数,顺便统计解的个数*/  
  5. {  
  6.     for(int i=0; i<num; ++i)  
  7.         printf("%d\t",arr[i]);  
  8.     printf("\n");  
  9.     count++;  
  10. }  
  11.   
  12. void queens(int pos=0)  
  13. {         
  14.     /*剪枝步骤*/  
  15.     /*同在斜线或者直线上*/  
  16.     for(int i=0; i<pos-1; ++i)  
  17.     {  
  18.         int off = arr[i] - arr[pos-1];  
  19.         if(off ==0 || off ==pos-1-i || -off==pos-1-i)  
  20.             return;  
  21.     }  
  22.   
  23.     /*符合条件就输出*/  
  24.     if( pos == num )  
  25.     {   display();return;}  
  26.       
  27.       
  28.     /*递归搜索解空间*/  
  29.     for(int k=0; k<num; ++k)  
  30.     {  
  31.         arr[pos]=k;  
  32.         queens(pos+1);  
  33.     }  
  34. }  

测试代码如下:

 

 

[cpp] view plain copy
 
  1. void main(int i,int j)  
  2. {  
  3.     queens();  
  4.     printf("count:%d",count);  
  5.     getchar();  
  6. }  


代码由三部分组成

 

[cpp] view plain copy
 
  1. function  
  2.    begin  
  3.        检查上一步是否正确【剪枝】  
  4.        如果满足条件就输出【输出】  
  5.        递归下一步的可能值【递归】     
  6.    end  
posted on 2016-09-19 13:40  呆呆码农  阅读(157)  评论(0编辑  收藏  举报