关于国际象棋皇后的递归问题——经典为8皇后
从大一开始学C以来,看了不少经典的变成题目,却单单没有看到关于8皇后的题目,杯具!!!
这一段时间开始学习linux c和python,在看python书籍的时候,突然看到了这么一道8皇后的题目,兴趣来了。
也不知道是自己的水平下降还是确实对于国际象棋不够了解,居然在理解题意的时候就出现了问题,下面,先将题目打印 出来:
题目:
在一个8×8国际象棋盘上,有8个皇后,每个皇后占一格;要求皇后间不会出现相互“攻击”现象,即不能有两个皇后处于同一行,同一列或同一对角线上,问共有多少中不同的方法。
i(0-7)
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
j(0-7) 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
正对角线:我们将和符号 ‘ / ’一个方向的称为正对角线。 特性: 对角上i+j值相同 ,范围在0-14
反对角线:于‘ / ’方向相同的称为反对角线。 特性:对角上 i-j 的值相同 , 范围在-7~0~7, 我们用i-j+7将 范围变为 0- 14
根据条件,同一行,同一列或同一对角线不能有两个皇后,
我们选择行 row 来存放在该行中,皇后应该在的列位置。如row [2, 4, 5, 1 , ……],意思是在第0行第2列有一个皇后,在第1行第4列有一个皇后。
使用col 来存放表示该列是否有皇后, 1表示没有, 0表示有
用pos_dig来存放正对角是否有皇后, pos_dig = [1, 1, 1, 1, 1, 1, 1, 1, ……] 0-14
用nag_dig来存放反对角是否有皇后, nag_dig = [1, 1, 1, 1, 1, 1, 1, 1,…… ] 0-14
程序过程:
声明 row, col , nag_dig , pos_dig, count
初始化
从第0行开始递归:
第0列从第0行开始分别于0到7行进行对比,判断皇后位置, 到第7行时开始输出row, count+1, 将col,nag_dig, pos_dig回归初始状态
第1列从第0行开始分别于0到7行进行对比,判断皇后位置, 到第7行时开始输出row, count+1, 将col,nag_dig, pos_dig回归初始状态
……
输出count
python代码如下:
#!/usr/bin/python# Filename: queen_my.pyglobal rowglobal colglobal pos_digglobal nag_digglobal countdef output_count():global countprint rowcount += 1def queen_my(i):for j in range(0, 8):if col[j] == 1 and nag_dig[i+j] == 1 and pos_dig[i-j+7] == 1:col[j] = 0row[i] = jpos_dig[i-j+7] = 0nag_dig[i+j] = 0if i < 7:queen_my(i+1)else:output_count()col[j] = 1pos_dig[i-j+7] = 1nag_dig[i+j] = 1row = []col = []pos_dig = []nag_dig = []count = 0for i in range(0, 8):row.append(0)col.append(1)for j in range(0, 15):pos_dig.append(1)nag_dig.append(1)queen_my(0)print "ways of seating queen's position are", count
关于国际象棋皇后的递归问题——经典为8皇后相关推荐
- C语言编程统计八皇后问题的解的个数,八皇后问题C语言解法
偶遇八皇后问题,随即自己写了一个仅供参考 #include #include #define SIZE 8 void Circumsribe(int(*checkerboard)[SIZE], int ...
- 2021-01-11经典的八皇后问题和N皇后问题, 回溯
八皇后的来源 八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或斜线 ...
- c语言八皇后问题经典算法,经典算法之八皇后问题
八皇后问题是一个古老而又著名的问题,是学习回溯算法的一个经典案例.今天我们就一起来探究一下吧! 时间退回到1848年,国际西洋棋棋手马克斯·贝瑟尔提出了这样的一个问题, 在8×8格的国际象棋上摆放八个 ...
- 【算法】递归(recursion)+经典例题个人分析
定义(个人理解) 1.自己调用比自己小一个规模的自己. 2.有结束条件. 3.对问题的细化. ps: 大家可以通过这个效应感性的感受一下递归. 德罗斯特效应: ******************** ...
- 8皇后问题-递归-回溯(Java)
目录 5.6 递归-八皇后问题(回溯算法) 5.6.1 解题思路 5.6.2 代码实现 第一遍的是跟着老师做的,所以添加了我自己大量的注解. 本次n皇后问题出自韩顺平的数据结构和算法 5.6 递归-八 ...
- n皇后问题python_N皇后问题—回溯算法经典例题
N 皇后是回溯算法经典问题之一.问题如下:请在一个 ni n 的正方形盘面上布置 n 名皇后,因为每一名皇后都可以自上下左右斜方向攻击,所以需保证每一行.每一列和每一条斜线上都只有一名皇后. 最简单的 ...
- python经典案例-Python递归的经典案例
目录 : 一.递归的简介 二.递归的经典应用 2.1 递归求阶乘 2.2 递归推斐波那契数列 2.3 二分法找有序列表指定值 2.4 递归解汉诺塔 前言: 当我们碰到诸如需要求阶乘或斐波那契数列的问题 ...
- Java黑皮书课后题第7章:***7.36(游戏:八皇后问题)经典的八皇后难题是要将八个皇后放在棋盘上,任何两个皇后都不能相互攻击(没有两个皇后在同行、同列、同一对角线)。编写程序显示一个解决方案
7.36(游戏:八皇后问题)经典的八皇后难题是要将八个皇后放在棋盘上,任何两个皇后都不能相互攻击(没有两个皇后在同行.同列.同一对角线).编写程序显示一个解决方案 题目 题目描述 破题 题目 题目描述 ...
- 【算法】递归|迷宫回溯问题|八皇后问题
[算法]递归|迷宫回溯问题|八皇后问题 迷宫回溯问题,要用动态的眼光来看待这个递归算法. package com.serein.recursion;/*** @author baichuan* @ ...
- [算法系列] 深入递归本质+经典例题解析——如何逐步生成, 以此类推,步步为营
[算法系列] 深入递归本质+经典例题解析--如何逐步生成, 以此类推,步步为营 本文是递归系列的第三篇, 第一篇介绍了递归的形式以及递归设计方法(迭代改递归),;第二篇以递归为引子, 详细介绍了快排和 ...
最新文章
- html基础代码笔记,HTML基础笔记
- MySQL字符集的一个坑
- python是一门什么课程-Python究竟是一门怎样的语言,Python为什么这么火?
- phonegap在android中如何退出程序
- 【svn老玩家翻车了,git玩的不够6】git恢复本地误删的文件
- 使用Anemometer基于pt-query-digest将MySQL慢查询可视化
- TensorFlow.js快速入门
- updatebyprimarykeyselective返回什么是成功_嫦娥五号发射升空成功!!!
- SAM4E单片机之旅——22、GMAC和PHY的介绍与初始化
- xsd是什么文件,作用是什么?
- c语言上机南开100题,南开100题上机c语言
- 采集PLC数据转MQTT上报实现对PLC远程调试和远程程序上下载
- C# excel net core读取xlsm
- LFO 低频振荡器简介及其 C/C++ 实现
- 如何构建一个在线绘图工具:Feakin 是如何设计与构建的?
- mysql数据库学习之sql调优思路
- Linux shell编程自动化运维,三剑客之awk原理,语法,内部变量,格式化输出,模式和动作 详细解析
- 8b/10b编码方式(详细)总结附实例快速理解
- 天气预报到底能有多精细?一个小网格里的天气变化
- 【Easyui】Easyui Datagrid 排序
热门文章
- OC 5028B欧创芯原装,开关降压型大功率恒流驱动芯片
- 中国人工智能(AI)发展历程、AI产业重点发展区域、重点发展城市及中国AI产业地区发展总结及展望
- 随机生成器,从给定列表中随机抽取一个元素
- 【预训练语言模型】MacBERT: Revisiting Pre-trained Models for Chinese Natural Language Processing
- 【Keil 5】STM32F401CCU6 固件库配置(超详细教程)
- xul eclipse插件_将HTML元素添加到XUL插件
- 解决关于WPS插入公式后显示不全的问题
- Excel表格中如何换行
- springboot集成easypoi实现excel多sheet导出,并设置表头样式
- yarn lib cli.js SyntaxError: Unexpected token