hdu 2553 N皇后问题 (DFS)
N皇后问题
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 6493 Accepted Submission(s): 2951
你的任务是,对于给定的N,求出有多少种合法的放置方法。
8
5
0
92
10
//31MS 256K 993 B C++
//经典N皇后问题 深搜解法
#include<stdio.h>
#include<string.h>
int cnt,n;
int q[][];
int Judge(int x,int y)
{
for(int i=;i<n;i++) if(q[x][i] && i!=y) return ;
for(int i=;i<n;i++) if(q[i][y] && i!=x) return ;
for(int i=x+,j=y+;i<n && j<n;i++,j++)
if(q[i][j]) return ;
for(int i=x-,j=y-;i>= && j>=;i--,j--)
if(q[i][j]) return ;
for(int i=x+,j=y-;i<n && j>=;i++,j--)
if(q[i][j]) return ;
for(int i=x-,j=y+;i>= && j<n;i--,j++)
if(q[i][j]) return ;
return ;
}
void dfs(int c)
{
if(c==n){ cnt++;return;}
for(int i=;i<n;i++)
if(Judge(i,c)){
q[i][c]=;
dfs(c+);
q[i][c]=;
}
}
int main(void)
{
int a[]={};//不打表会超时
for(int i=;i<;i++){
n=i;
cnt=;
memset(q,,sizeof(q));
dfs();
a[i]=cnt;
}
while(scanf("%d",&n)!=EOF && n)
{
printf("%d\n",a[n]);
}
return ;
}
给出一个高效的位运算求法:
//15MS 208K 704 B G++
#include<stdio.h>
int ans[];
int sum;
int upperlim;
void dfs(int row,int ld,int rd) //某行中纵列不可取,左右对角线不可取的限制条件
{
int pos,p;
if(row!=upperlim){
pos=upperlim&(~(row|ld|rd)); //取出可以放的位置
while(pos){
p=pos&(~pos+); //取pos最左边的1
pos=pos-p; //减去可取的
dfs(row|p,(ld|p)<<,(rd|p)>>); //深搜
}
}else sum++; //搜出来后总数+1
}
int main(void)
{
for(int i=;i<;i++){
sum=;
upperlim=(<<i)-; //i个1
dfs(,,);
ans[i]=sum;
}
int n;
while(scanf("%d",&n),n)
{
printf("%d\n",ans[n]);
}
return ;
}
hdu 2553 N皇后问题 (DFS)的更多相关文章
- HDU 2553(N皇后)(DFS)
http://acm.hdu.edu.cn/showproblem.php?pid=2553 i表示行,map[i]表示列,然后用DFS遍历回溯 可以参考这篇文章: http://blog.csdn. ...
- [HDU 2553]--N皇后问题(回溯)/N皇后问题的分析
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2553 N皇后问题 Time Limit: 2000/1000 MS (Java/Others) ...
- hdu 2553 N皇后问题 (经典DFS)
题目链接:点击链接 思路:用一维数组hang[num] = i,num表示第num行,i表示第i列,计算n = 1~10皇后的不同放置数量,然后打表 #include<stdio.h> # ...
- HDU 2553 N皇后问题(dfs)
N皇后问题 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description 在 ...
- hdu 2553 n皇后问题【DFS递归解法】
<题目链接> 题目大意: Problem Description 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45 ...
- HDU 2553 N皇后问题(深搜DFS)
N皇后问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- hdu 2553:N皇后问题(DFS遍历,水题)
N皇后问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- HDU 2553 N皇后问题【棋盘型DFS】
N皇后问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- HDU 2553 N皇后问题(详细题解)
这是一道深搜题目!问题的关键是在剪枝. 下面我们对问题进行分析: 1.一行只能放一个皇后,所以我们一旦确定此处可以放皇后,那么该行就只能放一个皇后,下面的就不要再搜了. 2.每一列只能放一个皇后,所以 ...
随机推荐
- JavaScript - 库 jQuery
测试 JavaScript 框架库 - jQuery 引用JQuery 如需测试JavaScript库,您需要在网页中引用它. 为了引用某个库,请使用<script>标签,其src属性设置 ...
- vim编辑器使用习惯问题
Ubuntu中vi在编辑状态下方向键不能用,一按方向键盘就出ABCD,想插入个字母还非常麻烦,还有回格键不能删除等我们平时习惯的一些键都不能使用. 解决办法: 可以安装vim full版本,在full ...
- P2158 [SDOI2008] (欧拉函数
题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图 ...
- 删除警告的方法 python
import warningswarnings.filterwarnings('ignore')
- python——获取数据类型
在python中,可使用type()和isinstance()内置函数获取数据类型 如: (1)type()的使用方法: >>> a = '230' >> ...
- Go实现mqtt服务
package main import ( "os" "log" "github.com/eclipse/paho.mqtt.golang" ...
- POJ:1222-EXTENDED LIGHTS OUT(矩阵反转)
EXTENDED LIGHTS OUT Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12956 Accepted: 8186 ...
- io编程,python
IO在计算机中指Input/Output,也就是输入和输出. Stream(流): 可以把流想象成一个水管,数据就是水管里的水,但是只能单向流动.Input Stream就是数据从外面(磁盘.网络)流 ...
- 理解JAVA与C的运行机制
1.java的运行机制 java的编译过程,将java的源程序(扩展名为.java的文件),由java编译程序将java的字节码文件(.class文件)在jvm上运行,机器码有cpu运行, jvm编译 ...
- Git-补丁文件交互
版本库间的交互是通过git push和/或git pull命令实现的,这是Git最主要的交互模式,但并不是全部.使用补丁文件是另外一种交互方式,适用于参与者众多的大型项目进行分布式开发. 创建补丁 G ...