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