8皇后可以用位运算来求,有点好奇的,不过,位运算这个强大的逻辑,没有怀疑,用了n为4的,对于太大的控制台放不下。
#include<stdio.h>
#define N 4
int result = 0 ;
int count = 1 ;
int upperlim = (1 << N) -1 ;
void com(int row,int ld, int rd) ;
void print_bin(int n);
int main(){
com(0,0,0) ;
printf("结果为:%d",result) ;
return 0 ;
}
void com(int row ,int ld , int rd){
int pos,p ;
printf("count = %d \nrow = ",count++) ;
print_bin(row) ;
printf(" ") ;
printf("ld = ") ;
print_bin(ld) ;
printf(" ") ;
printf("rd = ") ;
print_bin(rd) ;
printf("\n") ;
if(row != upperlim){
pos = upperlim & ~(row | ld | rd) ;
printf("pos = ") ;
print_bin(pos) ;
printf("\n") ;
while( pos != 0 ){
p = pos & ( - pos ) ;
pos = pos - p ;
com(row + p, (ld + p) << 1 , (rd + p) >> 1) ;
}
printf("回溯\n") ;
}else{
result++ ;
printf("第%d个解产生\n",result) ;
}
}
void print_bin(int n){
if(n < 2 ){printf("%d",n);}
else{
print_bin(n/2) ;
printf("%d",n%2) ;
}
}
输出结果:
其实,想作一个图出看看效果,时间有限。
参考:http://www.matrix67.com/blog/archives/266