题目:不允许任何两个皇后在棋盘的同一行、同一列和同一对角线上
#include <iostream>
#include <cstring>
#include<cmath>
using namespace std;
int N;
int queenPos[100];//皇后的位置
void NQueen(int k);//函数
int main()
{
cin >> N;
NQueen(0);//从第0行开始摆皇后
return 0;
}
void NQueen(int k)
{
int i;//表示第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;//设为第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);//递归开始摆第k+1个皇后的位置
}
}
}
样例: