N皇后问题(HDU—2253)

简介: N皇后问题(HDU—2253)

题目:

在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在

同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。

你的任务是,对于给定的N,求出有多少种合法的放置方法。

Input

共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。

Output

共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。

Sample Input

1
8
5
0

Sample Output

1
92
10

解题思路:这个题是放棋子的,要求两个棋子不能放在同一行同一列或者同一成45°角的斜线上。这个题就是一行一行的去寻找,然后看列或者对角线上是否放的有棋子。

注意:不打表的话会时间超时,所以找出n皇后对应的放的个数。

程序代码:

#include<stdio.h>
#include<string.h>
int v[2000],a[20];
int n,tot;
void search(int cur)
{
  int i,j;
  if(cur==n)
    tot++;
  else
    for(i=0;i<n;i++)
    {
      int ok=1;
      v[cur]=i;
      for(j=0;j<cur;j++)
        if(v[cur]==v[j]||cur-v[cur]==j-v[j]||cur+v[cur]==j+v[j])
        {
          ok=0;
          break;
        }
      if(ok==1)
        search(cur+1);
    } 
}
int main()
{
  int m,i;
  n=0;
  i=0;
  while(n<=11)
  {
    tot=0;
    memset(v,0,sizeof(v));
    search(0);
    a[n]=tot;
    n++;  
  }
  while(scanf("%d",&m),m!=0)
  {
    printf("%d\n",a[m]);
  }
  return 0;
}
相关文章
|
6月前
hdu1406 完数 (水题)
hdu1406 完数 (水题)
30 0
|
机器学习/深度学习 算法 Java
HDU-1370,Biorhythms(中国剩余定理)
本题主要就是应用中国剩余定理。
|
C++ 人工智能 BI
HDU2032杨辉三角
有点强迫症,主函数必须简洁,但是这里的if判断语句很碍眼,自己也并没有想到什么不画蛇添足的方法使代码更加简洁......
1480 0
|
人工智能 BI 存储
|
并行计算 算法 Java
HDU 1874 畅通工程续【Floyd算法实现】
畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 53806    Accepted Submission(s): 20092 Problem Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路。
1067 0
|
Java 测试技术
HDU 1248 寒冰王座(完全背包裸题)
寒冰王座 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 17092    Accepted Submission(s): 8800 ...
1189 0
【HDU 4451 Dressing】水题,组合数
有衣服、裤子、鞋数量分别为n,m,k,给出p对不和谐的衣-裤或裤-鞋搭配,问一共有多少种和谐的衣裤鞋的搭配。 全部的组合有Cn1Cm1Ck1种。 设p对中有p1对衣-裤,p2对裤-鞋,则不和谐的搭配共有p1*Ck1+p2*Cn1种,但有被重复计算两次的搭配共p3对,它们引用了同一裤。
888 0