输入一个正整数N,则程序输出N皇后的全部摆法。输出的每一行都代表一种摆法。
行里的第i个数字如果是n,就代表第i行的皇后应该放在第n列。
皇后的行、列编号都是从1开始算。
样例输入:
4
样例输出:
2 4 1 3
3 1 4 2
解析:先看前0~k-1行是否摆好 再考虑第k行
#include<iostream>
#include<cmath>
using namespace std;
int N;
int queenPos[100];//第i行摆的皇后的列号
void NQueen(int k);
int main()
{
cin>>N;
NQueen(0);
return 0;
}
void NQueen(int k){
int i;
if(k==N){
for(i=0;i<N;i++)
cout<<queenPos[i]+1<<" ";
cout<<endl;
return;
}
for(i=0;i<N;i++)//列
{
int j;
for(j=0;j<k;j++)//行
{
if(queenPos[j]==i||
abs(queenPos[j]-i)==abs(k-j))//比较是否相邻 列号相等或行的差和列的差相等都为相邻
break;
}
if(j==k)
{
queenPos[k]=i;
NQueen(k+1);
}
}
}