题目描述
在一个nXn的国际象棋棋盘上放置n(n<=12)个皇后,使它们不能互相攻击(即任意两个皇后不能在同一行、同一列或同一对角线上)。试求出所有方法。
输入
输入一个数n .(n<=12)
输出
输出所有的排列方案总数。
样例输入
4
样例输出
2
代码:
#include <bits/stdc++.h>
using namespace std;
bool d[25]={0},b[13]={0},c[25]={0};
int ans,a[13],n;
void ss(int x)
{
for(int i=1;i<=n;i++)
{
if((!b[i])&&(!c[x+i])&&(!d[x-i+(n-1)]))
{
a[x]=i;
b[i]=1;
c[x+i]=1;
d[x-i+(n-1)]=1;
if(x==n) ans++;
else ss(x+1);
b[i]=0;
c[x+i]=0;
d[x-i+(n-1)]=0;
}
}
}
int main()
{
scanf("%d",&n);
ss(1);
printf("%d",ans);
return 0;
}
该篇文章介绍了一个编程问题,如何在给定的nXn国际象棋棋盘上放置n个皇后,使得它们互不攻击。提供了C++代码实现,通过递归计算所有可能的排列方案总数。
556

被折叠的 条评论
为什么被折叠?



