创新工场 笔试 八皇后问题
其实没那么难
int count = 0; //统计棋局个数int queen[9] = {0}; //表示第column列填的棋子是在第 queen[column] 行//该函数表示填充column列的棋子void eight_queen( int column ){ if( column>0 && column <9 ){ //填子while( ++queen[column] <9){int ok=1; //辅助变量,帮助判断棋子能不能填for(int i=1;i<column; ++i){ //测试不能填棋子的情况if( queen[column]==queen[i] || column-i == queen[column]-queen[i] || column-i == queen[i]-queen[column] ){ ok=0;break;}}if( 1 == ok) { //能填棋子的话,对后面的元素初始化for(int i=column+1;i<9;++i)queen[i]=0;eight_queen(column+1);}}}else if( 9 == column){ //表示这已经成功填入了8个皇后for( int i=1; i<9; ++i){std::cout<< 8 * ( queen[i] -1 ) +i<<'\t';}count++;std::cout<<std::endl;return -1;}}int main(void){ eight_queen(1); std::cout<<"count="<<count<<std::endl; getchar(); return 0;}