HDU 2553 N皇后问题(深搜DFS)
N皇后问题
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1757 Accepted Submission(s): 772
你的任务是,对于给定的N,求出有多少种合法的放置方法。
8
5
0
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)的更多相关文章
- hdu 1198 Farm Irrigation(深搜dfs || 并查集)
转载请注明出处:viewmode=contents">http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://acm ...
- hdu 2553 N皇后问题 (DFS)
N皇后问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- HDU 2553 N皇后问题 (深搜)
题目链接 Problem Description 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上. 你的任务是,对 ...
- HDU 2553 N皇后问题(详细题解)
这是一道深搜题目!问题的关键是在剪枝. 下面我们对问题进行分析: 1.一行只能放一个皇后,所以我们一旦确定此处可以放皇后,那么该行就只能放一个皇后,下面的就不要再搜了. 2.每一列只能放一个皇后,所以 ...
- 算法学习笔记(六) 二叉树和图遍历—深搜 DFS 与广搜 BFS
图的深搜与广搜 复习下二叉树.图的深搜与广搜. 从图的遍历说起.图的遍历方法有两种:深度优先遍历(Depth First Search), 广度优先遍历(Breadth First Search),其 ...
- [HDU 2553]--N皇后问题(回溯)/N皇后问题的分析
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2553 N皇后问题 Time Limit: 2000/1000 MS (Java/Others) ...
- 图的遍历 之 深搜dfs
DFS 遍历 深度优先搜索是一个递归过程,有回退过程. 对一个无向连通图,在访问图中某一起始顶点u 后,由u 出发,访问它的某一邻接顶点v1:再从v1 出发,访问与v1 邻接但还没有访问过的顶点v2: ...
- 深搜(DFS),Image Perimeters
题目链接:http://poj.org/problem?id=1111 解题报告: 1.这里深搜有一点要注意,对角线上的点,如果为'.',则total不应该增加,因为这不是他的边长. #include ...
- 深搜(DFS),回溯,Fire Net
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=2 解题报告: 这里的深搜有一点不同,就是,在深搜每一个点时,都要深搜每 ...
随机推荐
- 虚拟环境pipenv的使用
安装虚拟环境 安装python3.6 python -m site --user-base 找到 用户基础目录 指定python版本的方式 pipenv --python 3.8 安装 用户范围内安装 ...
- 2->集群架构主机优化流程
集群架构优化流程: 有道笔记分享链接
- 学习记录:mongodb里插入整型值
=============================================== 2018/1/24_第1次修改 ccb_warlock == ...
- js权威指南---学习笔记01
1.当函数赋值给对象的属性时,就变为了方法:2.被零整除不报错,只会返回无穷大(Infinity)或者负无穷大.例外:零除以零等于非数字(NaN).3.NaN与任何值都不相等! 4.Javascrip ...
- java基础64 JavaScript中的Arrays数组对象和prototype原型属性(网页知识)
1.Arrays数组对象的创建方式 方式一: var 变量名=new Array(); //创建一个长度为0的数组. 方式二: var 变量名=new Array(长度); //创建一个指定长度的数组 ...
- 洛谷P3385负环
传送门 #include <iostream> #include <cstdio> #include <cstring> #include <algorith ...
- (二)HtmlUnit 使用
第一节: htmlunit 模拟浏览器请求 第二节: htmlunit 获取指定元素 第三节: htmlunit 使用代理 IP 第四节: htmlunit 取消 css,javascript 支持 ...
- 通过构造系统服务分发实现拦截&过滤 (仿360游戏保险箱)
想写这个程序主要是因为看了KSSD的一篇帖子,http://bbs.pediy.com/showthread.php?t=108378 讲 的是360保险箱保护游戏账号的原理,实际上就是对各种请求的拦 ...
- Dos.ORM - 目录、介绍
引言: Dos.ORM(原Hxj.Data)于2009年发布.2015年正式开源,该组件已在数百个成熟项目中应用,是目前国内用户量最大.最活跃.最完善的国产ORM.初期开发过程中参考了NBear与My ...
- Monaco Editor 使用入门
以前项目是用ace编辑器的,但是总有些不敬人意的地方.前端事件看见的VS Code编辑器Monaco Editor准备更换下,下面介绍一些使用中遇到的一点问题.代码提示 1.项目引用 import * ...