杭电 -- 2553 N皇后问题
题意及思路
题意:例如在八皇后问题中,8*8的方格中,要求放置八个皇后。要求两两皇后均不在同一行,不在同一列,并且不在同一个连线上。
思路:考虑到每一行每一列只能有一个皇后,这就可以看成是n的全排列问题,只要稍加改进就可以实现n皇后问题。朴素的做法是,每一次得到一个排列数时,判断两两皇后之间是否合法,但这种做法并不是最优的。更好的做法是,每次要放置第index行皇后时,判断该位置是否已经非法,如果非法则后续很多操作都不需要执行,类似于回溯,但这个又有点不一样。如果合法,则添加,递归执行下一行的皇后摆法问题。
踩坑点:八皇后问题的递归回溯实现要对递归理解深入一些,否则自己可能说服不了自己,思维容易死循环。其次有一点,需要开辟一段空间,存放已经解决好的n个皇后的问题,如8皇后问题已然解决,就将其存入memory[n] 记忆单元去,下一次直接输出即可。如果不这样折腾,就会TLE了。
代码
#include <iostream> #include <cstdio> #include <math.h>using namespace std;const int MAXSIZE = 100; int n,P[MAXSIZE],cnt=0; int memory[MAXSIZE] = {0}; bool hashTable[MAXSIZE] = {false};void Nqueue(int index){if(index == n+1){cnt++;memory[n]++;return;}for(int x=1;x<=n;x++){ //第x列 if(hashTable[x] == false){ //第x列还没有皇后bool f = true; //f为true表示当前皇后不会和之前的皇后冲突for(int pre=1;pre<index;pre++){if(abs(index-pre) == abs(x-P[pre])){f = false;break;}}if(f){P[index] = x; //将当前index行的皇后放在x列上 hashTable[x] = true;Nqueue(index + 1); //处理下一行 hashTable[x] = false; //处理一个摆法完毕,递归回掉 }} }}int main() {std::ios::sync_with_stdio(false);cin.tie(0);while(scanf("%d",&n)!=EOF && n!=0){cnt = 0;if(memory[n]==0){Nqueue(1); //从第一行开始 cout << cnt << endl;}elsecout << memory[n] << endl; }return 0; }
转载于:https://www.cnblogs.com/kyrie211/p/11273868.html
杭电 -- 2553 N皇后问题相关推荐
- 杭电 HOJ 2553 N皇后问题 解题报告
回溯法,经典题啊.发现很简单有木有...看代码~用数组保存sum值,否则会超时.杭电也够坑人的... #include <iostream> using namespace std;int ...
- 杭电acm2151题java的解法,杭电ACM题型分类
杭电ACM题型分类 基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029.1032.1037.1040.1048.1 ...
- hdoj杭电问题分类
杭电上的题虽然多,但是一直苦于找不到问题分类,网页都是英文的,所以平时做题也没怎么看,今天仔细一看,问题分类竟然就在主页....做了那么久的题居然没发现,表示已经狗带..不要笑,不知道有没有像我一样傻 ...
- 杭电ACM(HDUOJ)试题分类
杭电ACM试题分类 第一篇 1001 这个就不用说了吧 1002 简单的大数 1003 DP经典问题,最 ...
- 杭电acm第2304题答案c语言,【转】杭电ACM试题分类
注:网上搜的 第一篇 1001 这个就不用说了吧 1002 简单的大数 1003 DP经典问题,最大连续子段和 1004 简单题 1005 找规律(循环点) 1006 感觉有点BT的题,我到现在还没过 ...
- 杭电ACM题目类型整理
版权声明:(╯3╰) 转载请注明: http://blog.csdn.net/bat67 杭电acm题目分类版本1 1002 简单的大数 1003 DP经典问题,最大连续子段和 1004 简单题 10 ...
- 【杭电ACM】1097 A hard puzzle
[杭电ACM]1097 A hard puzzle http://acm.hdu.edu.cn/showproblem.php?pid=1097 先用int手写了算法结果竟然wrong answer ...
- 【ACM】杭电OJ 1106 函数atoi
函数atoi是把字符串转化成整数的函数,头文件为 #include "stdlib.h" e.g. 运行环境:Dev-C++ 5.11 杭电1106 调用了sort函数,运行的时间 ...
- 【ACM】杭电OJ 2037
题目链接:杭电OJ 2037 先把b[i]进行排序,然后,b[i]与a[i+1]进行比较. #include <iostream> #include <cstdio> #inc ...
最新文章
- JAVA线程池原理以及几种线程池类型介绍
- STM32f103C8T6 bootloader设计
- zabbix配置发送报警邮件
- [剑指offer]面试题34:丑数
- java多线程模拟loadrunner进行压测
- 滤镜应用——制作车辆行驶效果
- Laravel向视图传递变量的两种方法
- cocos2d-x基于windows平台交叉编辑android工程
- java学习——线程
- mysql用shell脚本链接数据库进行操作
- 01-artDialog4.1.7常用整理
- 【CRM】开源CRM
- SQL Server安装失败,SQL Server卸载不干净
- 科创板第二批受理名单公布,为何AI独角兽 “全军覆没”?...
- 超大水箱持久水润,让这个冬天不干燥,摩飞有雾加湿器体验
- 计算机英语冯敏课后题答案,(中学篇)2020年第10期:例谈基于协同效应的读后续写教学(浙江:冯敏)一文涉及的读后续写试题...
- 8种绝对成交的销售话术技巧
- html pdf 模板,记一次 HTML 模板 转 PDF
- iOS开启个人热点的纵向适配
- 全新2022强大的趣味心理测试小程序源码,趣味测试引流裂变神器,流量主激励广告实现管道收益
热门文章
- Vue登录注册,并保持登录状态
- 企业class类命名规范
- 蓝桥2017真题剪邮票
- IPTV监测和测试设备
- django mac 安装mysql_mac安装MySQL-Python报错
- linux下检查是否安装过某软件包
- mysql装完是什么样儿的_Win7系统安装MySQL之后找不到指定文件与服务如何解决?...
- bae java-tomcat_有人在BAE开发过java-tomcat应用吗?数据库老是链接失败
- dhcp服务器批量修改ip租期,dhcp服务器的ip地址租期默认是多久
- tbopen链接生成工具_筛选了100个配色工具后,我挑出了这25个