题目描述
在n×n格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于再n×n的棋盘上放置n个后,任何2个皇后不妨在同一行或同一列或同一斜线上。
输入输出格式
输入描述:
给定棋盘的大小n (n ≤ 13)
输出描述:
输出整数表示有多少种放置方法。
输入输出样例
输入样例#1:
8
输出样例#1:
92
思路
搜索。
代码
#include<stdio.h>
int a[]={},b[]={},c[]={},d[],p=;
int search(int n,int s)
{
int i;
for(i=;i<=n;i++)
{
if(a[i]==&&b[i+s]==&&c[s-i+n-]==)
{
a[i]=;b[i+s]=;c[s-i+n-]=;d[s]=i;
if(s==n)
p++;
else
search(n,s+);
a[i]=;b[i+s]=;c[s-i+n-]=;
}
}
}
int main()
{
int n;
scanf("%d",&n);
search(n,);
if(p==)
printf("no solute!");
else
printf("%d",p);
return ;
}