N皇后问题:

  1. #include <iostream>
  2. #include <cmath>
  3. using namespace std;
  4.  
  5. int N;
  6. int queenPos[];//用来存放算好的皇后位置。最左上角是(0,0)
  7.  
  8. void NQueen(int k);
  9.  
  10. int main()
  11. {
  12. cin >> N;
  13. NQueen(); //从第0行开始摆皇后
  14. return ;
  15. }
  16. void NQueen(int k) //在0~k-1行皇后已经摆好的情况下,摆第k行及其后的皇后
  17. {
  18. int i;
  19. if (k == N) // N 个皇后已经摆好
  20. {
  21. for (i = ; i < N; i++)
  22. cout << queenPos[i] + << " ";
  23. cout << endl;
  24. return;
  25. }
  26. for (i = ; i < N; i++)//逐一尝试第k个皇后所在的列i.
  27. {
  28. int j;
  29. for (j = ; j < k; j++)
  30. {
  31. //和已经摆好的 k个皇后的位置比较,看是否冲突
  32. //queenPos[j] == i表示第j个皇后所在的列queenPos[j]与第k个皇后所在的列i相等
  33. //abs(queenPos[j] - i) == abs(k-j)表示第k个皇后和第j个皇后在同一个斜线(行之差与列之差绝对值相等)
  34. if (queenPos[j] == i || abs(queenPos[j] - i) == abs(k - j))
  35. {
  36. break; //冲突,则试下一个位置
  37. }
  38. }
  39. if (j == k) //当前选的位置 i 不冲突
  40. {
  41. queenPos[k] = i; //将第k个皇后摆放在第i列
  42. NQueen(k + );
  43. }
  44. } //for( i = 0;i < N;i ++ )
  45. }

2N皇后:

  1. #include<iostream>
  2. #include<math.h>
  3. using namespace std;
  4. #define N 100
  5. int wq[N]; //whitequeen,黑皇后位置
  6. int bq[N]; //blackqueen,白皇后位置
  7. int cb[N][N]; //chessboard,棋盘
  8. int num; //皇后数目
  9. int count = ; //不同放置情况计数
  10.  
  11. int bqueen(int pos) //黑色皇后放置
  12. {
  13. int i;
  14. for (i = ; i < pos - ; i++)
  15. {
  16. int judge = bq[i] - bq[pos - ];
  17. if ( == judge || abs(judge) == abs(pos - - i))
  18. return ;
  19. }
  20. if (pos == num)
  21. {
  22. ::count++;
  23. return ;
  24. }
  25.  
  26. for (int i = ; i < num; i++)
  27. {
  28. if (i != wq[pos] && cb[pos][i])
  29. {
  30. bq[pos] = i;
  31. bqueen(pos + );
  32. }
  33. }
  34. }
  35. int wqueen(int pos) //白色皇后放置
  36. {
  37. int i;
  38. for (i = ; i < pos - ; i++)//处理之前置入的皇后,判断是否冲突,冲突就返回,同时貌似放在这边还能使递归能返回,很巧妙,博主我只是搬运
  39. {
  40. int judge = wq[i] - wq[pos - ];
  41. if ( == judge || abs(judge) == abs(pos - - i ))
  42. return ;
  43. }
  44.  
  45. //当前的pos意为已经有pos个放好了,这次函数在处理pos+1的调用
  46. if (pos == num)//放满了才会调用
  47. {
  48. bqueen();
  49. return ;
  50. }
  51.  
  52. for (int i = ; i < num; i++)
  53. {
  54. if (cb[pos][i])//该位置是否能放,能放的话,每一个都试一下,如果不行,会返回0----当前不判断的是否能放,由N+1
  55. //来查看N次是否能放,不能放就会返回0
  56. {
  57. wq[pos] = i;
  58. wqueen(pos + );
  59. }
  60.  
  61. }
  62. }
  63.  
  64. int main()
  65. {
  66. cin >> num;
  67. for (int i = ; i < num; i++)
  68. for (int j = ; j < num; j++)
  69. cin >> cb[i][j];
  70. wqueen();//先白后黑
  71. cout << ::count;
  72. return ;
  73. }

蓝桥--2n皇后问题(递归)--搬运+整理+注释的更多相关文章

  1. 2n皇后问题-------递归 暴力求解题与分布讨论题

    问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行.同一列或同一 ...

  2. Java实现 蓝桥杯VIP 基础练习 2n皇后问题

    基础练习 2n皇后问题 时间限制:1.0s 内存限制:512.0MB 问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一 ...

  3. 蓝桥杯 基础训练 2n皇后

    数月前做的2N皇后基本看书敲代码的,然后发现当时的代码不对,正好做到算法提高的8皇后·改,顺便把以前的代码顺带改了下,题目如下: 问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋 ...

  4. 蓝桥杯 基础训练 BASIC-27 2n皇后问题

    基础练习 2n皇后问题   时间限制:1.0s   内存限制:512.0MB 问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都 ...

  5. 蓝桥杯 2n皇后问题 深搜

    默认大家会了n皇后问题 基础练习 2n皇后问题   时间限制:1.0s   内存限制:512.0MB     问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和 ...

  6. 蓝桥杯试题 基础练习 2n皇后问题以及n皇后问题

    在学习2n皇后之前,我们应该认识一下n皇后问题: 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上.你的任务是,对于 ...

  7. 对八皇后的补充以及自己解决2n皇后问题代码

    有了上次的八皇后的基础.这次准备解决2n皇后的问题,: //问题描述// 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行./ ...

  8. C语言 · 2n皇后问题

    基础练习 2n皇后问题   时间限制:1.0s   内存限制:512.0MB        锦囊1 搜索算法. 锦囊2 先搜索n皇后的解,在拼凑成2n皇后的解. 问题描述 给定一个n*n的棋盘,棋盘中 ...

  9. 计蒜课--2n皇后、n皇后的解法(一般操作hhh)

    给定一个 n*nn∗n 的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入 nn 个黑皇后和 nn个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条斜线(包括正负斜线)上,任意的两个白皇后都 ...

随机推荐

  1. vue之store中属性更新用法

    //1.首先定义store对象下的属性 state: { data:'测试数据' } // 2.定义更改data数据的方法 mutations: { updatedata(state, p) { st ...

  2. 朱晔的互联网架构实践心得S2E7:漫谈平台架构的工作(基础架构、基础服务、基础平台、基础中间件等等)

    前言 程序开发毕竟还不是搬砖这种无脑体力劳动,需要事先有标准,有架构,有设计,绝对不是新公司今天创立,明天就可以开始编码的.其实很多公司在起步的时候没有财力和资源建设独立的基础架构或平台架构部门,甚至 ...

  3. shell里的IFS内置环境变量

    IFS 的全称是 Interal Field Separator ,即“内部区域分隔符”,它也是一个内置环境变量,存储着默认的文本分隔符,默认下这分隔符是空格符(space character),制表 ...

  4. 记录下这周的mysql调优工作

    这周一至周四基本都在做mysql的测试和调优工作,包括erlang端对mysql的写入测试,到今天为止暂且告一段落,下周先做下其他的开发.    测试环境    使用的测试环境是aliyun的杭州节点 ...

  5. Appium基础一:Appium概念

    1.Appium介绍: Appium是一款开源跨平台(IOS和Android平台)支持多种开发语言(java.python等)进行测试Native/Web/Hybrid的Android/iOS App ...

  6. JMeter进行压力测试

    一.jmeter的安装 1.从    http://jmeter.apache.org/download_jmeter.cgi 下载jmeter(图1正中间的apache-jmeter-2.13.tg ...

  7. CentOS lvm

    1.创建PVpvcreate /dev/sdb /dev/sdc或pvcreate /dev/sdb1 /dev/sdc1 2.查看PVpvdisplay 3.创建VGvgcreate vgdata ...

  8. 面向对象OONo.3单元总结

    一,JML语言 1)JML理论基础:JML是一类语言,用来描述一个方法或一个类的功能.以及这个类在实现这个功能时需要的条件.可能改变的全局变量.以及由于条件问题不能实现功能时这个方法或类的行为,具有明 ...

  9. sencha touch 入门学习资料大全

    现在sencha touch已经更新到2.3.1版本了 重新整理一下资料 官方网站:http://www.sencha.com/products/touch/ 在线文档:http://docs.sen ...

  10. lua 分割字符串

    -- 参数:待分割的字符串,分割字符 -- 返回:子串表.(含有空串) function split(str, split_char) local sub_str_tab = {} while tru ...