N皇后问题

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


 

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
 //经典的N皇后问题
#include <iostream>
#include <stdio.h>
#include <memory.h>
using namespace std; int ch[][];
int n, num, result[]; void dfs(int x, int y)
{
if(ch[x][y]) return; //如果该点已经被攻击,则返回
int i, xx, yy;
if(x == n) //如果
{
num++;
return;
} //下面个人觉得比较巧妙,因为会有重复的地方很难分析是属于哪个皇后
//若用了下面位置的 ++ or -- ,则巧妙地避免上述情况
//一共八个方向进行标记:上、下、左、右、左上、左下、右上、右下
xx = x; yy = y;
while(xx>) ch[xx--][y]++;
xx = x; yy = y;
while(yy>) ch[x][yy--]++;
xx = x; yy = y;
while(xx<=n) ch[xx++][y]++;
xx = x; yy = y;
while(yy<=n) ch[x][yy++]++;
xx = x; yy = y;
while(xx<=n && yy<=n) ch[xx++][yy++]++;
xx = x; yy = y;
while(xx> && yy<=n) ch[xx--][yy++]++;
xx = x; yy = y;
while(xx<=n && yy>) ch[xx++][yy--]++;
xx = x; yy = y;
while(xx> && yy>) ch[xx--][yy--]++; for(i = ; i <= n; i++)
{
dfs(x+, i);
} //若这个皇后深搜后的结果不成功,则要返回原来的情况,八个方向都 --
xx = x; yy = y;
while(xx>) ch[xx--][y]--;
xx = x; yy = y;
while(yy>) ch[x][yy--]--;
xx = x; yy = y;
while(xx<=n) ch[xx++][y]--;
xx = x; yy = y;
while(yy<=n) ch[x][yy++]--;
xx = x; yy = y;
while(xx<=n && yy<=n) ch[xx++][yy++]--;
xx = x; yy = y;
while(xx> && yy<=n) ch[xx--][yy++]--;
xx = x; yy = y;
while(xx<=n && yy>) ch[xx++][yy--]--;
xx = x; yy = y;
while(xx> && yy>) ch[xx--][yy--]--;
} void init() //初始化函数
{
int i, j;
for(i = ; i < ; i++)
for(j = ; j < ; j++)
ch[i][j] = ;
} void set()
{
int i, k;
for(k = ; k <= ; k++)
{
num = ; n = k; //初始化
for(i = ; i <= k; i++)
{
init(); //初始化
dfs(, i); //继续dfs寻找
}
result[k] = num;
}
} int main()
{
set();
while(scanf("%d", &n), n)
{
printf("%d\n", result[n]);
} return ;
}

HDU 2553 N皇后问题(深搜DFS)的更多相关文章

  1. hdu 1198 Farm Irrigation(深搜dfs || 并查集)

    转载请注明出处:viewmode=contents">http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://acm ...

  2. hdu 2553 N皇后问题 (DFS)

    N皇后问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  3. HDU 2553 N皇后问题 (深搜)

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

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

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

  5. 算法学习笔记(六) 二叉树和图遍历—深搜 DFS 与广搜 BFS

    图的深搜与广搜 复习下二叉树.图的深搜与广搜. 从图的遍历说起.图的遍历方法有两种:深度优先遍历(Depth First Search), 广度优先遍历(Breadth First Search),其 ...

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

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

  7. 图的遍历 之 深搜dfs

    DFS 遍历 深度优先搜索是一个递归过程,有回退过程. 对一个无向连通图,在访问图中某一起始顶点u 后,由u 出发,访问它的某一邻接顶点v1:再从v1 出发,访问与v1 邻接但还没有访问过的顶点v2: ...

  8. 深搜(DFS),Image Perimeters

    题目链接:http://poj.org/problem?id=1111 解题报告: 1.这里深搜有一点要注意,对角线上的点,如果为'.',则total不应该增加,因为这不是他的边长. #include ...

  9. 深搜(DFS),回溯,Fire Net

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=2 解题报告: 这里的深搜有一点不同,就是,在深搜每一个点时,都要深搜每 ...

随机推荐

  1. Linux configure关于交叉编译的参数设置【转】

    转自:http://blog.csdn.net/darennet/article/details/9003005 configure的参数众多,一般包括如下 --srcdir=DIR 这个选项对安装没 ...

  2. Python之容器类Collections

    容器类Collections 标签(空格分隔): Python进阶 defaultdict counter deque namedtuple defaultdict defaultdict的作用是可以 ...

  3. 工作常用shell集合

    <1>日志回滚案例======>[root@localhost test]# cat hbase.sh hbase_rotate_log ()       {    log=$1;  ...

  4. cbow&&skipgram详细

    前面:关于层次huffman树和负例采样也要知道的,这里就不详细写了 来源于:https://mp.weixin.qq.com/s?__biz=MzI4MDYzNzg4Mw==&mid=224 ...

  5. ASP .Net Core系统部署到SUSE 16 Linux Enterprise Server 12 SP2 64 具体方案

    .Net Core 部署到 SUSE 16 Linux Enterprise Server 12 SP2 64 位中的步骤 1.安装工具 1.apache 2..Net Core(dotnet-sdk ...

  6. POJ 3286 How many 0's(数位DP模板)

    题目链接:http://poj.org/problem?id=3286 题目大意: 输入n,m,求[n,m]的所有数字中,0出现的总数是多少,前导零不算. 解题思路: 模板题,设dp[pos][num ...

  7. 用django-cors-headers做跨域

    什么是CORS? CORS(跨域资源共享,Cross-Origin Resource Sharing)是一种跨域访问的机制,可以让Ajax实现跨域访问. 其实,在服务器的response header ...

  8. 20165333 2017-2018-2《Java程序设计》课程总结

    一.每周作业链接汇总 1.预备作业一:我期望的师生关系 简要内容: 印象深刻的老师 我期望的师生关系 关于JAVA学习 2.预备作业二:学习基础和C语言学习基础 简要内容: 技能学习 C语言学习 关于 ...

  9. #Git 详细中文安装教程

    Step 1 Information 信息 Please read the following important information before continuing 继续之前,请阅读以下重要 ...

  10. android发布版本的几个命令

    ./build_native.sh /opt/software/apache-ant-1.8.2/bin/ant clean #/opt/software/apache-ant-1.8.2/bin/a ...