八皇后算法问题
- const int num = 8;/*可以随意修改,num是多少解的就是几皇后问题*/
- int arr[num];
- int count =0;
- void display()/*一个简单的数组输出函数,顺便统计解的个数*/
- {
- for(int i=0; i<num; ++i)
- printf("%d\t",arr[i]);
- printf("\n");
- count++;
- }
- void queens(int pos=0)
- {
- /*剪枝步骤*/
- /*同在斜线或者直线上*/
- for(int i=0; i<pos-1; ++i)
- {
- int off = arr[i] - arr[pos-1];
- if(off ==0 || off ==pos-1-i || -off==pos-1-i)
- return;
- }
- /*符合条件就输出*/
- if( pos == num )
- { display();return;}
- /*递归搜索解空间*/
- for(int k=0; k<num; ++k)
- {
- arr[pos]=k;
- queens(pos+1);
- }
- }
测试代码如下:
- void main(int i,int j)
- {
- queens();
- printf("count:%d",count);
- getchar();
- }
代码由三部分组成
- function
- begin
- 检查上一步是否正确【剪枝】
- 如果满足条件就输出【输出】
- 递归下一步的可能值【递归】
- end