【题目描述】
在 N*N 的棋盘上放置 N 个皇后(n<=10)而彼此不受攻击(即在棋盘的任一行,任一列和任一对角线上不能放置 2 个皇后),编程求解所有的摆放方法。
输入
输入:n
输出
每行输出一种方案,每种方案顺序输出皇后所在的列号,各个数之间有空格隔开。若无方案,则输出no solute!
样例
【输入】
4
【输出】
2 4 1 3
3 1 4 2
【参考代码】
#include<bits/stdc++.h>
using namespace std;
int n;
int a[11][11];
bool ab=false;
void f(int k)
{
if(k==n+1)
{
ab=true;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(a[i][j]==1)
cout<<j<<' ';
cout<<endl;
return;
}
for(int i=1;i<=n;i++)
{
//判断左斜边是否满足
int s=i;
bool fff=false;
for(int j=k-1;j>=1;j--)
{
s--;
if(a[j][s]==1)
{
fff=true;
break;
}
}
if(fff==true)
continue;
//判断右斜边是否满足
s=i;
fff=false;
for(int j=k-1;j>=1;j--)
{
s++;
if(s>n)
break;
if(a[j][s]==1)
{
fff=true;
break;
}
}
if(fff==true)
continue;
//判断竖线是否满足
fff=false;
for(int j=1;j<k;j++)
{
if(a[j][i]==1)
{
fff=true;
break;
}
}
if(fff==true)
continue;
a[k][i]=1;
f(k+1);
a[k][i]=0;
}
}
int main()
{
cin>>n;
f(1);
if(ab==false)
cout<<"no solute!"<<endl;
return 0;
}