int n;
int queenpos[100]; //用来存放算好的皇后位置。最左上角是(0.0)
void nqueen (int k);
int main()
{
cin >> n;
nqueen(0);
return 0;
}
void nqueen (int k) //在0~k~1行皇后已经摆好的情况下,摆第k行及其后的皇后
{
int i;
if( k == n ) // n个皇后已经摆好
{
for(i = 0 ; i < n ; i++)
{
cout << queenpos[i] + 1 << ” “;
}
cout << endl;
return ;
}
for(i = 0; i < n ; i++) // 逐尝试第k个皇后的位置
{
int j;
for(j = 0 ; j < k; j++) //和已经摆好的k个皇后的位置进行比较,看是否冲突
{
if( queenpos[j] == i || abs(queenpos[j] – i) == abs(k-j))
{
break; // 冲突,测试下一个位置
}
}
if(j == k) //当选的位置i不冲突
{
queenpos[k] = i; //将第k个皇后摆放在位置i
nqueen(k+1);
}
} //for(i = 0; i < n; i++)
}