hdu 2553 N皇后问题(一维数组详尽解释)
- //一维数组解法(注释详尽)
//num皇后可以表示第num列,然后枚举num皇后所在的行
//二维数组对角线转换为坐标的关系
#include<stdio.h>- #include<string.h>
- int map[],hang[],ans[];
- int n,cnt;
- void Dfs(int num)
- {
- int i,j,k;
- if(num>n)
- {
- cnt++;
- return ;
- }
- for(i=;i<=n;i++)
- {
- map[num]=i;//第num的皇后在第num列i行
- if(!hang[i])//枚举第i行是否可行
- {
- for(j=;j<num;j++)//枚举前num-1个皇后
- {//num就代表列,map[num]就代表num所在的行
- if(map[num]-num==map[j]-j||map[num]+num==map[j]+j)
- break;
- }
- if(j==num)
- {
- hang[i]=;
- Dfs(num+);
- hang[i]=;
- }
- }
- }
- }
- int main()
- {
- int m;
- for(n=; n<; n++)
- {
- memset(hang,,sizeof(hang));
- memset(map,,sizeof(map));
- cnt=;
- Dfs();
- ans[n]=cnt;
- }
- while(scanf("%d",&m)!=EOF&&m)
- {
- printf("%d\n",ans[m]);
- }
- return ;
- }
单纯二维坐标做法:
- #include <stdio.h>
- #include <string.h>
- int count[];//n的最大范围是10,打表!
- int k,cal;//k个大小的棋盘放的数目
- int map[][];//棋盘
- int dfs(int row,int column)
- {
- //最后一行也合适,放置数目加1
- if(row>k)
- {
- cal++;
- return ;
- }
- //判断同一列是否有棋子
- for(int i=; i<row; i++)
- if(map[i][column])
- return ;
- //判断左上45度是否有棋子
- for(int i=row-,j=column-; i>&&j>; i--,j--)
- if(map[i][j])
- return ;
- //判断右上45度是否有棋子
- for(int i=row-,j=column+; i>&&j<=k; i--,j++)
- if(map[i][j])
- return ;
- //都通过,该点合适并判断下一行
- map[row][column]=;
- for(int i=; i<=k; i++)
- {
- //当dfs(row+1,i,k)为1时,改行为最后一行,棋盘已放满
- if(dfs(row+,i))
- break;
- }
- map[row][column]=;
- //该点判断完成,恢复后再去判断其他点
- return ;
- }
- int main()
- {
- int n;
- for(k=; k<=; k++)
- {
- memset(map,,sizeof(map));
- cal=;
- //count[k]=0;
- for(int i=; i<=k; i++)
- dfs(,i);
- count[k]=cal;
- }
- while(scanf("%d",&n)!=EOF&&n)
- printf("%d\n",count[n]);
- return ;
- }
hdu 2553 N皇后问题(一维数组详尽解释)的更多相关文章
- hdu 2553 N皇后问题 (经典DFS)
题目链接:点击链接 思路:用一维数组hang[num] = i,num表示第num行,i表示第i列,计算n = 1~10皇后的不同放置数量,然后打表 #include<stdio.h> # ...
- [HDU 2553]--N皇后问题(回溯)/N皇后问题的分析
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2553 N皇后问题 Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 2553 N皇后问题(详细题解)
这是一道深搜题目!问题的关键是在剪枝. 下面我们对问题进行分析: 1.一行只能放一个皇后,所以我们一旦确定此处可以放皇后,那么该行就只能放一个皇后,下面的就不要再搜了. 2.每一列只能放一个皇后,所以 ...
- HDU 2553(N皇后)(DFS)
http://acm.hdu.edu.cn/showproblem.php?pid=2553 i表示行,map[i]表示列,然后用DFS遍历回溯 可以参考这篇文章: http://blog.csdn. ...
- hdu 2553 N皇后问题
回溯. 一个主对角线,副对角线的技巧 //vis[0][i]表示第i列有没有皇后 vis[1][cur+i]表示副对角线 vis[2][cur-i+n]表示主对角线 #include <cstd ...
- HDU 2553 n皇后问题(回溯法)
DFS Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description ...
- HDU 2553 N皇后问题(dfs)
N皇后问题 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description 在 ...
- [ An Ac a Day ^_^ ] hdu 2553 N皇后问题 搜索
曾经想过一天一AC 坚持下来的确不容易额 (我是没坚持下来 尽量以后坚持…… 经典的N皇后问题 搜索的入门问题 学了这么久竟然一直没敲过 今天敲一下…… 这道题也不是很简单额 纯暴力就超时了 要打一下 ...
- hdu 2553 n皇后问题【DFS递归解法】
<题目链接> 题目大意: Problem Description 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45 ...
随机推荐
- matlab滤波器的设计
求出濾波器的階數以及 3dB 截止頻率後,可用相應的 Matlab 函數計算出實現傳遞函數的分子分母係數來.巴特沃斯型濾波器是通帶內最大平坦.帶外單調下降型的,其計算命令是:[b,a] = butte ...
- 11g R2 rac linstener 监听配置
两个节点host,ipvip ,scan的信息 #eth0-Public IP 162.12.0.1 cqltjcpt1 162.12.0.3 cqltjcpt2 #eth1 PRIVAT ...
- FPGA前世今生(一)
关于FPGA,我想做硬件的或多或少都听过.从上世纪80年代算来,FPGA已走过了30多个年头.我们以FPGA两大生产厂商,两大巨头之一的INTEL(altera)公司的FPGA为例,为大家逐步介绍FP ...
- android滚条简单说明
先看一下我自己写的布局,电脑屏幕太小,只截取到了一个radiobutton. 先画一个horizontalScrollView,因为我要做水平滚动,然后我需要水平布局,就添加了一个LinearLayo ...
- PHP命名空间带来的干扰
有时候,不想受命名空间约束,就可以整一个全局类. protected function sendDayuSms($tel,$code,$template_type,$product = "[ ...
- 《PHP对象、模式与实践》之高级特性
高级特性包括:1.静态方法和属性(通过类而不是对象来访问数据和功能)2.抽象类和接口(设计,实现分离)3.错误处理(异常)4.Final类和方法(限制继承)5.拦截器(自动委托)6.析构方法(对象销毁 ...
- Sqoop导出MySQL数据
导入所有表: sqoop import-all-tables –connect jdbc:mysql://ip:port/dbName --username userName --password p ...
- Python Twisted系列教程16:Twisted 进程守护
作者:dave@http://krondo.com/twisted-daemonologie/ 译者: Cheng Luo 你可以从”第一部分 Twist理论基础“开始阅读:也可以从”Twisted ...
- Deep Learning 学习笔记(4):Logistic Regression 逻辑回归
逻辑回归主要用于解决分类问题,在现实中有更多的运用, 正常邮件or垃圾邮件 车or行人 涨价or不涨价 用我们EE的例子就是: 高电平or低电平 同时逻辑回归也是后面神经网络到深度学习的基础. (原来 ...
- Android控件使用自定义字体
我们不可能只满足于系统自带的字体(太丑),其实控件自定义字体也很简单.. 1.首先找到该字体的ttf文件. 2.把字体文件放在scr/mian/assets/fonts下,如果没有该路径则自己创建. ...