创新工场 笔试 八皇后问题

来源:互联网 发布:软件开发验收标准 编辑:程序博客网 时间:2024/06/05 20:20

其实没那么难

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;} 


原创粉丝点击