/*
问题描述:输入一个正整数N,则程序输出N皇后问题的全部摆法。
输出结果里的每一行都代表一种摆法。行里的第i个数字
如果是n,就代表第i行的皇后应该放在第n列。皇后的行、列编号都是从1
开始计算
*/
#include <iostream>
#include <cmath>
using namespace std;
int N;
int queenPos[100];//用来存放算好的皇后位置,最左上角是(0,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);//递归,继续摆放第k+1行
}
}
}
int main()
{
cin>>N;
NQueen(0);//从第零航开始摆皇后
return 0;
}
运行结果: