时间限制: 1 Sec 内存限制: 16 MB
提交: 787 解决: 309
[提交][状态][讨论版]题目描述
在一个N*N的棋盘上放置N个皇后,且使得每两个之间不能互相攻击,也就是使得每两个不在同一行,同一列和同一斜角线上。以下为N=8时问题的一个解:

输入
输出
样例输入
4
样例输出
4 Q
3 Q
2 Q
1 Q
a b c d
4 Q
3 Q
2 Q
1 Q
a b c d
提示
输出格式说明: a的场宽为4,其它数字和字母的场宽均为2,两种解法之间空一行。

code
#include<iostream>
#include<iomanip>
using namespace std;
const int N(30);
bool a[N]={0},b[N]={0},c[N]={0},f[N][N]={0};
int n,t(0);
void search(int i)
{
if (i>n)
{
t++;
if (t>1) cout<<endl;
for (int i=1;i<=n;i++)
{
cout<<setw(2)<<n+1-i;
for (int j=1;j<=n;j++)
if (f[i][j])
cout<<setw(2)<<'Q';
else cout<<setw(2)<<' ';
cout<<endl;
}
cout<<setw(2)<<' ';
for (char ch='a';ch<'a'+n;ch++)
cout<<setw(2)<<ch;
cout<<endl;
return;
}
for (int j=1;j<=n;j++)
if (!a[j]&&!b[i+j]&&!c[i-j+n])
{
a[j]=b[i+j]=c[i-j+n]=f[i][j]=true;
search(i+1);
a[j]=b[i+j]=c[i-j+n]=f[i][j]=false;
}
}
int main()
{
cin>>n;
search(1);
//cin.get();cin.get();
return 0;
}
posted on 2012-08-16 23:13
龙在江湖 阅读(508)
评论(0) 编辑 收藏 引用 所属分类:
搜索 、
算法 、
基础