题目描述
N皇后的排列,每行一个不冲突;N<=13。
输入要求
一个数字N (6 <= N <= 13) 表示棋盘是N x N大小的。
输出要求
前三行为前三个解,每个解的两个数字之间用一个空格隔开。第四行只有一个数字,表示解的总数。
解的输出顺序为从上到下从左到右,小的优先输出
输入样例
6
输出样例
2 4 6 1 3 5
3 6 2 5 1 4
4 1 5 2 6 3
4
提示
来源
#include<iostream>
#include<cstring>
using namespace std;
int q[15]={0};
int num=0;
int n;
void qun(int i)
{
int j;
int col,value;
if(i==n+1)//所有
{
num++;
if(num<=3)
{
for(j=1;j<=n;j++)
{ if(j==n)
cout<<q[j]<<endl;
else
cout<<q[j]<<" ";}
}
return ;
}
else
{
for(col=1;col<=n;col++)//遍历i行的每一列
{
value=1;
for(j=1;j<i;j++)//n遍历前i行是否符合
{ if(col==q[j]||i-col==j-q[j]||i+col==j+q[j])
{
value=0;
break;
}
}
if(value==1)
{
q[i]=col;
qun(i+1);
}
}
}
}
int main(void)
{
cin>>n;
memset(q,15,sizeof(q));
qun(1);
cout<<num<<endl;
return 0;
}