【题目】在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法?请设计程序算出结果。
- 文件名:[作业]
- 作者:〈漆黑〉
- 描述:〈 在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法?请设计程序算出结果。 〉
- 创建时间:2019.7.10
/****************************
* 文件名:[作业]
* 作者:〈漆黑〉
* 描述:〈 在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法?请设计程序算出结果。 〉
* 创建时间:2019.7.10
****************************/
#include<iostream>
#include<stdlib.h>
using namespace std;static int* x; //用x数组来存放解向量
static int sum; //用sum变量来记录有几个解
int check(int k) { //查看k皇后是否满足约束条件 for (int i = 0; i < k; i++)if (x[i] == x[k] || abs(x[i] - x[k]) == abs(i - k)) //满足不在同一条斜线和同一列 return 1;return 0;
}
void queen(int n) {int k = 0; //从皇后0开始放sum = 0;while (k >= 0) {x[k]++; //摆放第k个皇后(第一次摆放皇后0) while (x[k] < n && check(k) == 1) //对皇后k进行检测,直到不发生冲突或x[k]越界 x[k]++; //检测下一列 if (x[k] < n && k == n - 1){//成功for (int i = 0; i < n; i++)cout << x[i] + 1 << " ";cout << endl;sum++;}if (x[k] < n && k < n - 1) //若皇后还没有摆放完,就摆放下一个皇后k = k+1 k++;else //否则就是发生了越界,要进行回溯 {x[k] = -1;k--;}}if (sum == 0)cout << "无解" << endl;
}
int main() {int n = 8;x = new int[n + 1];for (int i = 0; i < n; i++) {x[i] = -1;}queen(n);cout << "一共解的个数为 :" << sum << endl;return 0;
}
【题目】在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法?请设计程序算出结果。相关推荐
- 在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,用Python编写程序,问有多少种摆法?并列举出所有摆法。
可以扩展问题以使用NxN大小的板来解决难题. 代码 '''N Queens problem'''from functools import reduce from itertools import c ...
- 题目95:百鸡问题:一只公鸡值5元,一只母鸡值3元,而1元可买3只小鸡,用百元买百鸡。现有n元钱,想买n只鸡。问有多少种买法?(钱要用完)
题目转载:http://python.wzms.com/s/1/85 题目描述: 百鸡问题:一只公鸡值5元, 一只母鸡值3元,而1元可买3只小鸡,用百元买百鸡. 现有n元钱,想买n只鸡. 问有多少种买 ...
- 穷举问题-搬砖某工地需要搬运砖块,已知男人一人搬3块,女人一人搬2块,小孩两人搬1块。如果想用n人正好搬n块砖,问有多少种搬法? 输入格式:
某工地需要搬运砖块,已知男人一人搬3块,女人一人搬2块,小孩两人搬1块.如果想用n人正好搬n块砖,问有多少种搬法? 输入格式: 输入在一行中给出一个正整数n. 输出格式: 输出在每一行显示一种方案,按 ...
- 某工地需要搬运砖块,已知男人一人搬3块,女人一人搬2块,小孩两人搬1块。如果想用n人正好搬n块砖,问有多少种搬法
题目编号: 136 输入格式: 输入在一行中给出一个正整数n. 输出格式: 输出在每一行显示一种方案,按照"men = cnt_m, women = cnt_w, child = cnt_c ...
- 题目54:百钱百鸡 一只公鸡值5元,一只母鸡值3元,而1元可买3只小鸡,用百元买百鸡。现有n元钱,想买n只鸡。问有多少种买法?(钱要用完)
题目转载:http://python.wzms.com/s/1/50 题目描述: 百鸡问题:一只公鸡值5元, 一只母鸡值3元,而1元可买3只小鸡,用百元买百鸡. 现有n元钱,想买n只鸡. 问有多少种买 ...
- [递归]一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
这题是用C写的~ 在牛客上半天找不着ACM模式,练习模式里只有核心代码模式 这样用C语言编译器就不能自定义函数啊,不鸡肋吗??? 解决方法:在核心代码模式下用C++编译器(反正C++完全兼容C的不是吗 ...
- 牛客网刷题java之(斐波那契数列)一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 分析: 对于本题,前提只有 一次 1阶或者2阶的跳法. a.如果两种跳法, ...
- (java)跳台阶:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
文章目录 题目描述 思路 解法一:递归暴力破解 解法二: 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 思路 解法一 ...
- 一只青蛙一次可以跳上1级台阶,也可以跳上2级,也可以跳n级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)
青蛙跳阶级问题其实就是一个递归的问题 题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级,也可以跳n级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 先上解法再解释 pub ...
最新文章
- Java程序员年薪40W,他1年走了别人5年的路(技术提炼)
- 数据库中如何判断某参数为空就不执行where条件
- Python 黑魔法 --- 描述器(descriptor)
- 设备树与驱动的关系_裸机程序如何驱动硬件?
- L :WeChat Walk
- smartdeblur有手机版吗_《GTA5》高仿手机版问世,更新高清城市地图后你会喜欢吗?...
- 喜用神最正确的算法_各种电磁仿真算法的优缺点和适用范围(FDTD, FEM和MOM等)...
- vnc 字体设置_Xterm字体大小的设置
- Windows 禁止mysql 自动更新
- SQL2008数据库的备份与还原
- 星云的Linux专用学习手册
- java excel导入_一场关于Java.lang.String类的极限调优操作
- linux入门和简单应用举例
- Python | 股票数据可视化
- 360 os3.0 android7.1,【360 N6 Pro】360OS安卓7.1系统V3.0.087付费纯净版ROOT刷机包
- 弹性卡箍零件自动化检测 与包装生产线的研制
- 【算法与数据结构】—— 并查集
- 【无人机控制】四旋翼飞行器飞行控制系统含Matlab源码
- 学习uni-app之微信登录
- 线性代数的本质——学习笔记