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;
}
相关文章
|
机器学习/深度学习
N皇后问题
N皇后问题
91 0
|
机器学习/深度学习 算法 Java
|
API
L - 小希的迷宫 HDU - 1272
L - 小希的迷宫 HDU - 1272
88 0
|
算法
n皇后问题
n皇后问题
134 0
HDOJ(HDU) 2090 算菜价(简单水题、)
HDOJ(HDU) 2090 算菜价(简单水题、)
193 0
|
机器学习/深度学习
|
C++ 人工智能 BI
HDU2032杨辉三角
有点强迫症,主函数必须简洁,但是这里的if判断语句很碍眼,自己也并没有想到什么不画蛇添足的方法使代码更加简洁......
1515 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 某省自从实行了很多年的畅通工程计划后,终于修建了很多路。
1095 0