题意及思路

题意:例如在八皇后问题中,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皇后问题相关推荐

  1. 杭电 HOJ 2553 N皇后问题 解题报告

    回溯法,经典题啊.发现很简单有木有...看代码~用数组保存sum值,否则会超时.杭电也够坑人的... #include <iostream> using namespace std;int ...

  2. 杭电acm2151题java的解法,杭电ACM题型分类

    杭电ACM题型分类 基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029.1032.1037.1040.1048.1 ...

  3. hdoj杭电问题分类

    杭电上的题虽然多,但是一直苦于找不到问题分类,网页都是英文的,所以平时做题也没怎么看,今天仔细一看,问题分类竟然就在主页....做了那么久的题居然没发现,表示已经狗带..不要笑,不知道有没有像我一样傻 ...

  4. 杭电ACM(HDUOJ)试题分类

    杭电ACM试题分类 第一篇 1001 这个就不用说了吧                      1002 简单的大数                            1003 DP经典问题,最 ...

  5. 杭电acm第2304题答案c语言,【转】杭电ACM试题分类

    注:网上搜的 第一篇 1001 这个就不用说了吧 1002 简单的大数 1003 DP经典问题,最大连续子段和 1004 简单题 1005 找规律(循环点) 1006 感觉有点BT的题,我到现在还没过 ...

  6. 杭电ACM题目类型整理

    版权声明:(╯3╰) 转载请注明: http://blog.csdn.net/bat67 杭电acm题目分类版本1 1002 简单的大数 1003 DP经典问题,最大连续子段和 1004 简单题 10 ...

  7. 【杭电ACM】1097 A hard puzzle

    [杭电ACM]1097  A hard puzzle http://acm.hdu.edu.cn/showproblem.php?pid=1097 先用int手写了算法结果竟然wrong answer ...

  8. 【ACM】杭电OJ 1106 函数atoi

    函数atoi是把字符串转化成整数的函数,头文件为 #include "stdlib.h" e.g. 运行环境:Dev-C++ 5.11 杭电1106 调用了sort函数,运行的时间 ...

  9. 【ACM】杭电OJ 2037

    题目链接:杭电OJ 2037 先把b[i]进行排序,然后,b[i]与a[i+1]进行比较. #include <iostream> #include <cstdio> #inc ...

最新文章

  1. JAVA线程池原理以及几种线程池类型介绍
  2. STM32f103C8T6 bootloader设计
  3. zabbix配置发送报警邮件
  4. [剑指offer]面试题34:丑数
  5. java多线程模拟loadrunner进行压测
  6. 滤镜应用——制作车辆行驶效果
  7. Laravel向视图传递变量的两种方法
  8. cocos2d-x基于windows平台交叉编辑android工程
  9. java学习——线程
  10. mysql用shell脚本链接数据库进行操作
  11. 01-artDialog4.1.7常用整理
  12. 【CRM】开源CRM
  13. SQL Server安装失败,SQL Server卸载不干净
  14. 科创板第二批受理名单公布,为何AI独角兽 “全军覆没”?...
  15. 超大水箱持久水润,让这个冬天不干燥,摩飞有雾加湿器体验
  16. 计算机英语冯敏课后题答案,(中学篇)2020年第10期:例谈基于协同效应的读后续写教学(浙江:冯敏)一文涉及的读后续写试题...
  17. 8种绝对成交的销售话术技巧
  18. html pdf 模板,记一次 HTML 模板 转 PDF
  19. iOS开启个人热点的纵向适配
  20. 全新2022强大的趣味心理测试小程序源码,趣味测试引流裂变神器,流量主激励广告实现管道收益

热门文章

  1. Vue登录注册,并保持登录状态
  2. 企业class类命名规范
  3. 蓝桥2017真题剪邮票
  4. IPTV监测和测试设备
  5. django mac 安装mysql_mac安装MySQL-Python报错
  6. linux下检查是否安装过某软件包
  7. mysql装完是什么样儿的_Win7系统安装MySQL之后找不到指定文件与服务如何解决?...
  8. bae java-tomcat_有人在BAE开发过java-tomcat应用吗?数据库老是链接失败
  9. dhcp服务器批量修改ip租期,dhcp服务器的ip地址租期默认是多久
  10. tbopen链接生成工具_筛选了100个配色工具后,我挑出了这25个