八皇后C++版本
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++版本的更多相关文章
- 八皇后算法的另一种实现(c#版本)
八皇后: 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于 ...
- C#八皇后问题 枚举值
记得刚出道的时候, 有考虑怎么面试, 以及可能会遇到的面试题, 有一个人说了一下 八皇后问题, 据说要用 sql 语句写出来, 暂时我 写了一个C#版本的, 经测验,八皇后算法结果为 92种, 这个与 ...
- Scheme来实现八皇后问题(2)
版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/9790466.html 作者:窗户 Q ...
- 八皇后问题的Python实现和C#实现
看到八皇后问题的解决思路, 感觉很喜欢. 我用C#实现的版本之前贴在了百度百科上(https://baike.baidu.com/item/%E5%85%AB%E7%9A%87%E5%90%8E%E9 ...
- [codeup] 2046 八皇后
题目描述 会下国际象棋的人都很清楚:皇后可以在横.竖.斜线上不限步数地吃掉其他棋子.如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题. 对于某个满足要求的8 ...
- python基础教程总结8——特殊方法,属性,迭代器,生成器,八皇后问题
1. 重写一般方法和特殊的构造方法 1.1 如果一个方法在B类的一个实例中被调用(或一个属性被访问),但在B类中没有找到该方法,那么会去它的超类A里面找. class A: ... def hello ...
- 八皇后问题——列出所有的解,可推至N皇后
<数据结构>--邓俊辉版本 读书笔记 今天学习了回溯法,有两道习题,一道N皇后,一道迷宫寻径.今天,先解决N皇后问题.由于笔者 擅长java,所以用java重现了八皇后问题. 注意是jav ...
- 数据结构0103汉诺塔&八皇后
主要是从汉诺塔及八皇后问题体会递归算法. 汉诺塔: #include <stdio.h> void move(int n, char x,char y, char z){ if(1==n) ...
- Python学习二(生成器和八皇后算法)
看书看到迭代器和生成器了,一般的使用是没什么问题的,不过很多时候并不能用的很习惯 书中例举了经典的八皇后问题,作为一个程序员怎么能够放过做题的机会呢,于是乎先自己来一遍,于是有了下面这个ugly的代码 ...
随机推荐
- python文档翻译之python说明
3.1使用Python进行计数 让我们来使用一些Python的简单命令,通过终端启动解释器等待出现>>>. 3.1.1数值类型 在终端中输入数学表达式,Python解释器会执行这些表 ...
- 我还在生产玩 JDK7,JDK 15 却要来了!
自从 JDK9 之后,每年 3 月与 9 月 JDK 都会发布一个新的版本,而2020 年 9 月即将引来 JDK15. 恰巧 IDEA 每四五个月会升级一个较大的版本,每次升级之后都会支持最新版本 ...
- PuTTY 连接 linux 服务器执行 make menuconfig 乱码问题解决
PuTTY 连接 linux 服务器执行 make menuconfig 时可能出现乱码,如下图所示: 有两个方法解决这个问题: 方法一: 修改 PuTTY 配置如下图所示: 方法二: 在 -/.ba ...
- Android Studio 自定义字体显示英文音标
android:fontFamily="serif" 网上查了很多自定义字体的方式,或多或少都有些麻烦,最后还是尝试着认为内置字体不应该实现不了英文音标问题,就一个一个字体试了一下 ...
- 烦人的Null,你可以走开点了
1. Null 的问题 假设现在有一个需要三个参数的方法.其中第一个参数是必须的,后两个参数是可有可无的. 第一种情况,在我们调用这个方法的时候,我们只能传入两个参数,对第三个参数,我们在上下文里是没 ...
- 013 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 07 基本数据类型变量的存储
013 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 07 基本数据类型变量的存储 变量和它的值如何在内存中进行存储的? 前面学习过:Java中的数据类型分为基本 ...
- winfrom加载自定义控件、窗口pannel后闪烁问题
我用一个panel当容器,里面有好多控件,加载的时候一直闪烁. 借鉴网友的思路: 窗口初始化界面加入代码 this.DoubleBuffered = true;//设置本窗体 SetStyle(C ...
- CentOS 7 系统的安装
1.进入安装界面 2.选择"Install CentOS 7" 3.进入欢迎界面,默认语言为"English",点击"Continue" 进 ...
- 持续集成工具之Jenkins安装部署
一.DevOps理念 所谓DevOps是指development和Operations的组合,中文意思就是开发和运维的简写.devops理念主要是针对企业中的研发人员.运维人员和测试人员的工作理念,是 ...
- Python库之SQLAlchemy
一.SQLAlchemy简介 1.1.SQLAlchemy是什么? sqlalchemy是一个python语言实现的的针对关系型数据库的orm库.可用于连接大多数常见的数据库,比如Postges.My ...