emmmm~刚刚学C++,写一个八皇后,凑合看吧嘤嘤嘤

  1. 1 #include <iostream>
  2. 2 #include<cstdlib>
  3. 3 #include<cmath>
  4. 4
  5. 5 using namespace std;
  6. 6 int main()
  7. 7 {
  8. 8 int sz = 8;
  9. 9 int que[sz] = {0};
  10. 10 int i = 0;
  11. 11 while(i >= 0)
  12. 12 {
  13. 13 int k = 0;
  14. 14 while(k < i)
  15. 15 {
  16. 16 if(que[k] != que[i] && (abs(que[i] - que[k]) != abs(i - k)))
  17. 17 ++k;
  18. 18 else
  19. 19 break;
  20. 20 }
  21. 21
  22. 22 if(k < i)//出现冲突
  23. 23 {
  24. 24 ++que[i];
  25. 25
  26. 26 while(que[i] == sz)
  27. 27 {
  28. 28 que[i] = 0;
  29. 29 --i;
  30. 30
  31. 31 if(i < 0)
  32. 32 break;
  33. 33 ++que[i];
  34. 34 }
  35. 35 continue;
  36. 36 }
  37. 37
  38. 38 else
  39. 39 {
  40. 40 ++i;
  41. 41 if(i < sz)
  42. 42 continue;
  43. 43
  44. 44 cout << "找到一个方案";
  45. 45 for(k = 0;k < sz;++k)
  46. 46 cout << que[k];
  47. 47 cout << endl;
  48. 48
  49. 49 if(que[0] < sz-1)
  50. 50 {
  51. 51 ++que[0];
  52. 52 continue;
  53. 53 }
  54. 54 else
  55. 55 break;
  56. 56 }
  57. 57 }
  58. 58
  59. 59 return 0;
  60. 60 }

其实还是挺好明白的一个算法,叫——回溯法;

重点就在于:好多break和continue啥的跳来跳去——continue注意他的跳跃范围比较广

拿52行的continue说事:你感觉他会跳哪去?

答案就是11行(超远跳跃,你值得拥有)

————————————————————————————————————————————————————————————————————

第二波更新

详情请去做洛谷里面的八皇后

  1. 1 #include<iostream>
  2. 2 #include<cstdlib>
  3. 3 #include<cmath>
  4. 4 #include<cstdio>
  5. 5 using namespace std;
  6. 6 int a[100],b[100],c[100],d[100];
  7. 7 int total,n;
  8. 8
  9. 9 void print()
  10. 10 {
  11. 11 if(total <= 2)
  12. 12 {
  13. 13 for(int k = 1;k <= n;k++)
  14. 14 cout << a[k] << " ";
  15. 15
  16. 16 cout << endl;
  17. 17 }
  18. 18 total++;
  19. 19 }
  20. 20
  21. 21 void queen(int i)
  22. 22 {
  23. 23 if(i > n)
  24. 24 {
  25. 25 print();
  26. 26 return;
  27. 27 }
  28. 28
  29. 29 else
  30. 30 {
  31. 31 for(int j = 1;j <= n;j++)
  32. 32 {
  33. 33 if((!b[j]) && (!c[i + j]) && (!d[i - j + n]))
  34. 34 {
  35. 35 a[i] = j;
  36. 36 b[j] = 1;
  37. 37 c[i + j] = 1;
  38. 38 d[i - j + n] = 1;
  39. 39
  40. 40 queen(i + 1);
  41. 41 b[j] = 0;
  42. 42 c[i + j] = 0;
  43. 43 d[i - j + n] = 0;
  44. 44 }
  45. 45 }
  46. 46 }
  47. 47 }
  48. 48
  49. 49 int main()
  50. 50 {
  51. 51 cin >> n;
  52. 52 queen(1);
  53. 53 cout << total;
  54. 54 return 0;
  55. 55 }

这次更新的重点在于:queen()函数里面的return的作用

现阶段我能说的就是:return—>结束该层函数的运行返回递归调用函数的上层

举个例子:现在执行的是queen(7),但是发现所执行的方案无法满足要求,那就返回上一层也就是queen(6),更改相应的值,同时清除脏数据

八皇后C++版本的更多相关文章

  1. 八皇后算法的另一种实现(c#版本)

    八皇后: 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于 ...

  2. C#八皇后问题 枚举值

    记得刚出道的时候, 有考虑怎么面试, 以及可能会遇到的面试题, 有一个人说了一下 八皇后问题, 据说要用 sql 语句写出来, 暂时我 写了一个C#版本的, 经测验,八皇后算法结果为 92种, 这个与 ...

  3. Scheme来实现八皇后问题(2)

    版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/9790466.html 作者:窗户 Q ...

  4. 八皇后问题的Python实现和C#实现

    看到八皇后问题的解决思路, 感觉很喜欢. 我用C#实现的版本之前贴在了百度百科上(https://baike.baidu.com/item/%E5%85%AB%E7%9A%87%E5%90%8E%E9 ...

  5. [codeup] 2046 八皇后

    题目描述 会下国际象棋的人都很清楚:皇后可以在横.竖.斜线上不限步数地吃掉其他棋子.如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题. 对于某个满足要求的8 ...

  6. python基础教程总结8——特殊方法,属性,迭代器,生成器,八皇后问题

    1. 重写一般方法和特殊的构造方法 1.1 如果一个方法在B类的一个实例中被调用(或一个属性被访问),但在B类中没有找到该方法,那么会去它的超类A里面找. class A: ... def hello ...

  7. 八皇后问题——列出所有的解,可推至N皇后

    <数据结构>--邓俊辉版本 读书笔记 今天学习了回溯法,有两道习题,一道N皇后,一道迷宫寻径.今天,先解决N皇后问题.由于笔者 擅长java,所以用java重现了八皇后问题. 注意是jav ...

  8. 数据结构0103汉诺塔&八皇后

    主要是从汉诺塔及八皇后问题体会递归算法. 汉诺塔: #include <stdio.h> void move(int n, char x,char y, char z){ if(1==n) ...

  9. Python学习二(生成器和八皇后算法)

    看书看到迭代器和生成器了,一般的使用是没什么问题的,不过很多时候并不能用的很习惯 书中例举了经典的八皇后问题,作为一个程序员怎么能够放过做题的机会呢,于是乎先自己来一遍,于是有了下面这个ugly的代码 ...

随机推荐

  1. python文档翻译之python说明

    3.1使用Python进行计数 让我们来使用一些Python的简单命令,通过终端启动解释器等待出现>>>. 3.1.1数值类型 在终端中输入数学表达式,Python解释器会执行这些表 ...

  2. 我还在生产玩 JDK7,JDK 15 却要来了!

    自从 JDK9 之后,每年 3 月与 9 月 JDK 都会发布一个新的版本,而2020 年 9 月即将引来 JDK15. 恰巧 IDEA 每四五个月会升级一个较大的版本,每次升级之后都会支持最新版本 ...

  3. PuTTY 连接 linux 服务器执行 make menuconfig 乱码问题解决

    PuTTY 连接 linux 服务器执行 make menuconfig 时可能出现乱码,如下图所示: 有两个方法解决这个问题: 方法一: 修改 PuTTY 配置如下图所示: 方法二: 在 -/.ba ...

  4. Android Studio 自定义字体显示英文音标

    android:fontFamily="serif" 网上查了很多自定义字体的方式,或多或少都有些麻烦,最后还是尝试着认为内置字体不应该实现不了英文音标问题,就一个一个字体试了一下 ...

  5. 烦人的Null,你可以走开点了

    1. Null 的问题 假设现在有一个需要三个参数的方法.其中第一个参数是必须的,后两个参数是可有可无的. 第一种情况,在我们调用这个方法的时候,我们只能传入两个参数,对第三个参数,我们在上下文里是没 ...

  6. 013 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 07 基本数据类型变量的存储

    013 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 07 基本数据类型变量的存储 变量和它的值如何在内存中进行存储的? 前面学习过:Java中的数据类型分为基本 ...

  7. winfrom加载自定义控件、窗口pannel后闪烁问题

    我用一个panel当容器,里面有好多控件,加载的时候一直闪烁. 借鉴网友的思路: 窗口初始化界面加入代码 this.DoubleBuffered = true;//设置本窗体   SetStyle(C ...

  8. CentOS 7 系统的安装

    1.进入安装界面 2.选择"Install CentOS 7" 3.进入欢迎界面,默认语言为"English",点击"Continue" 进 ...

  9. 持续集成工具之Jenkins安装部署

    一.DevOps理念 所谓DevOps是指development和Operations的组合,中文意思就是开发和运维的简写.devops理念主要是针对企业中的研发人员.运维人员和测试人员的工作理念,是 ...

  10. Python库之SQLAlchemy

    一.SQLAlchemy简介 1.1.SQLAlchemy是什么? sqlalchemy是一个python语言实现的的针对关系型数据库的orm库.可用于连接大多数常见的数据库,比如Postges.My ...