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) ; } }
输出结果:
其实,想作一个图出看看效果,时间有限。