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

 

posted @ 2016-03-23 13:07  soul-love  阅读(217)  评论(0编辑  收藏  举报