N皇后问题

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 11855    Accepted Submission(s): 5301

Problem Description
在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。
你的任务是,对于给定的N,求出有多少种合法的放置方法。

 
Input
共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。
 
Output
共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。
 
Sample Input
1
8
5
0
 
Sample Output
1
92
10
做题时需要注意以下几点:
    (1)本行所放的皇后位置不能与上一行同列
    (2)不能与上一行在主对角线上
    (3)不能与上一行在副对角线上
判断是否在对角线上(此处不会  参考的刘汝佳编著的算法竞赛入门经典)
根据下表判断主对角线 条件cur-a[cur]==j-a[j]可以判断主对角线
0 1 2 3 4 5 6 7
-1 0 1 2 3 4 5 6
-2 -1 0 1 2 3 4 5
-3 -2 -1 0 1 2 3 4
-4 -3 -2 -1 0 1 2 3
-5 -4 -3 -2 -1 0 1 2
-6 -5 -4 -3 -2 -1 0 1
-7 -6 -5 -4 -3 -2 -1 0

格子(x,y)的y-x值标示了主对角线

根据下表判断另一条对角线 条件cur+a[cur]==j+a[j]判断副对角线

0 1 2 3 4 5 6 7
1 2 3 4 5 6 7 8
2 3 4 5 6 7 8 9
3 4 5 6 7 8 9 10
4 5 6 7 8 9 10 11
5 6 7 8 9 10 11 12
6 7 8 9 10 11 12 13
7 8 9 10 11 12 13 14

格子的(x,y)的x+y值标示了副对角线

以上两图为棋盘的对角线标示

附上AC代码:

#include<stdio.h>
#include<string.h>
#define MAX 15
int a[MAX];
int s[MAX];
int vis[MAX];
int n,t,tot;
void dfs(int cur)//cur代表行数
{
int i,j;
if(cur==n)
{
tot++;//记录当前行数时符合题意的摆放个数
}
else
{
for(i=0;i<n;i++)
{
int ok=1;
a[cur]=i;//尝试将皇后放在第cur行的第i列
for(j=0;j<cur;j++)//判断 是否和前面的皇后冲突
{
if(a[cur]==a[j]||cur-a[cur]==j-a[j]||cur+a[cur]==j+a[j])//判断上一行和对角线上是否符合题意
{
ok=0;//与上一行皇后有冲突则将皇后放在下一列继续判断
break;
}
}
if(ok)//如果满足条件
dfs(cur+1);//继续回溯
}
}
}
int main()
{
int m,j,i,k;
memset(a,0,sizeof(a));
memset(s,0,sizeof(s));
for(n=1;n<=10;n++)
{
tot=0;
dfs(0);
s[n]=tot;//打表记录对应行数时符合题意的个数
}
while(scanf("%d",&t),t)
{
printf("%d\n",s[t]);
}
return 0;
}

hdoj 2553 N皇后问题【回溯+打表】的更多相关文章

  1. [HDU 2553]--N皇后问题(回溯)/N皇后问题的分析

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2553 N皇后问题 Time Limit: 2000/1000 MS (Java/Others)     ...

  2. HDU 2553 n皇后问题(回溯法)

     DFS Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   Description ...

  3. HDU 2553 N皇后问题(回溯 + 剪枝)

    本文链接:http://i.cnblogs.com/EditPosts.aspx?postid=5398797 题意: 在N*N(N <= 10)的方格棋盘放置了N个皇后,使得它们不相互攻击(即 ...

  4. 杭电 2553 N皇后问题

    http://acm.hdu.edu.cn/showproblem.php?pid=2553 N皇后问题 Time Limit: 2000/1000 MS (Java/Others)    Memor ...

  5. 八皇后问题-回溯法(MATLAB)

    原创文章,转载请注明:八皇后问题-回溯法(MATLAB) By Lucio.Yang 1.问题描述 八皇后问题是十九世纪著名数学家高斯于1850年提出的.问题是:在8*8的棋盘上摆放8个皇后,使其不能 ...

  6. HDU 2553 N皇后问题 (DFS_回溯)

    Problem Description 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即随意2个皇后不同意处在同一排,同一列,也不同意处在与棋盘边框成45角的斜线上. 你的任务是.对于给定的N ...

  7. HDU 2553 N皇后问题(详细题解)

    这是一道深搜题目!问题的关键是在剪枝. 下面我们对问题进行分析: 1.一行只能放一个皇后,所以我们一旦确定此处可以放皇后,那么该行就只能放一个皇后,下面的就不要再搜了. 2.每一列只能放一个皇后,所以 ...

  8. hdu 2553 N皇后问题

    回溯. 一个主对角线,副对角线的技巧 //vis[0][i]表示第i列有没有皇后 vis[1][cur+i]表示副对角线 vis[2][cur-i+n]表示主对角线 #include <cstd ...

  9. 八皇后,回溯与递归(Python实现)

    八皇后问题是十九世纪著名的数学家高斯1850年提出 .以下为python语句的八皇后代码,摘自<Python基础教程>,代码相对于其他语言,来得短小且一次性可以打印出92种结果.同时可以扩 ...

随机推荐

  1. UIViewCotroller 的生命周期函数

    Viewcontroller 的所有生命周期函数 重写时 一定要先写 父类 方法 就是(super  +生命周期函数) LoadView ViewDidLoad ViewDidUnload: 在iOS ...

  2. iOS实现地图半翻页效果--老代码备用参考

    // Curl the image up or down CATransition *animation = [CATransition animation]; [animation setDurat ...

  3. 百度地图API使用介绍

    百度地图API 开始学习百度地图API最简单的方式是看一个简单的示例.以下代码创建了一个520x340大小的地图区域并以天安门作为地图的中心: 1. <html> 2. <head& ...

  4. zepto源码学习-05 ajax

    学习zeptoajax之前需要先脑补下,强烈推荐此文http://www.cnblogs.com/heyuquan/archive/2013/05/13/js-jquery-ajax.html 还有A ...

  5. 《STL源码剖析》笔记

    STL六大组件 1.容器(container):各种数据结构,如vector,list,deque,set,map等 2.算法(algorithm):各种常用算法如sort,search,copy,e ...

  6. 如何在Blog中使用feedburner管理RSS订阅

    http://www.cnblogs.com/procoder/archive/2010/02/12/feedburner.html

  7. Qt中的多线程编程

    http://www.ibm.com/developerworks/cn/linux/l-qt-mthrd/ Qt 作为一种基于 C++ 的跨平台 GUI 系统,能够提供给用户构造图形用户界面的强大功 ...

  8. ANDROID_MARS学习笔记_S02_005_AppWidget1

    一.AppWidget介绍 1.要在手机生成AppWidget需的东西 (1)AppWidgetProviderInfo a).res\xml\example_appwidget_info.xml b ...

  9. 155. Min Stack

    题目: Design a stack that supports push, pop, top, and retrieving the minimum element in constant time ...

  10. 用APP赚钱(转)

    英文原文:MAKING MONEY ON APPS 做为半个 iOS 开发的一家公司,我时不时地考虑如何用 APP 赚钱.最近由Brent Simmons 和 Jared Sinclair 的文章挑起 ...