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

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

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

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

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

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

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

第二波更新

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

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

    客户端模块的核心功能是提供统一的用户请求操作接口. 接口定义 客户端模块的核心是IClient接口,定义了客户端网络请求的方法. public interface IClient<S exten ...

  2. input输入框 只能输入数字 oninput = "value=value.replace(/[^\d]/g,'')" input输入框输入大于0的数字 oninput="value=value.replace(/\D|^0/g,'')"

    项目中因为利用 element-ui 和avue两个ui框架搭建的 1.利用element-ui自带的校验需要注意点 prop  :rules ref这三个属性 2.利用oninput时间进行校验   ...

  3. 番外篇 - Linux环境准备

     这是一个比较早的系列,最近发现一直没有更新...    asp.net core跨平台,所以我们首先需要一个linux来验证,所以第一篇就是准备我们的环境   .netcore尝试在centos6. ...

  4. jfinal3连接sqlserver2012 保存日期字段出现“不支持从 UNKNOWN 到 UNKNOWN 的转换”错误

    修改Dialect中的fillStatement方法,增加判断日期类型并转换为时间戳

  5. 解决 webpack .\src\main.js .\dist\bundle.js 错误

    打包的命令格式:webpack 要打包的文件的路径 打包好的输出文件的路径 栗子: webpack .\src\main.js .\dist\bundle.js 提示错误,错误信息如下: 错误原因 w ...

  6. 花时三月 终于Spring Boot 微信点餐开源系统! 附源码

    架构 前后端分离:             Nginx与Tomcat的关系在这篇文章,几分钟可以快速了解: https://www.jianshu.com/p/22dcb7ef9172 补充: set ...

  7. sqlserver date与datetime区别及sqlserver日期格式转换

    date是SQL Server 2008新引进的数据类型.它表示一个日子,不包含时间部分,可以表示的日期范围从公元元年1月1日到9999年12月31日.只需要3个字节的存储空间.DateTime 日期 ...

  8. 交互式甘特图组件VARCHART XGantt 如何在活动中标注非工作间隔

    甘特图从1998年的第一个商用版本开始就致力于计划编制和项目管理方面控件的研究和开发,经过20多年的积累和沉淀,目前可为软件开发商和最终用户提供最顶级的计划编制和项目管理的控件产品,帮助用户快速的整合 ...

  9. 免费开源工作流Smartflow-Sharp v2.0

    @font-face { font-family: 宋体 } @font-face { font-family: "Cambria Math" } @font-face { fon ...

  10. # 095 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 03 封装总结 01 封装知识点总结

    095 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...