N皇後問題,n皇後
題目描述
在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;
}
View Code