其实没那么难
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;
}