从大一开始学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皇后相关推荐

  1. C语言编程统计八皇后问题的解的个数,八皇后问题C语言解法

    偶遇八皇后问题,随即自己写了一个仅供参考 #include #include #define SIZE 8 void Circumsribe(int(*checkerboard)[SIZE], int ...

  2. 2021-01-11经典的八皇后问题和N皇后问题, 回溯

    八皇后的来源 八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或斜线 ...

  3. c语言八皇后问题经典算法,经典算法之八皇后问题

    八皇后问题是一个古老而又著名的问题,是学习回溯算法的一个经典案例.今天我们就一起来探究一下吧! 时间退回到1848年,国际西洋棋棋手马克斯·贝瑟尔提出了这样的一个问题, 在8×8格的国际象棋上摆放八个 ...

  4. 【算法】递归(recursion)+经典例题个人分析

    定义(个人理解) 1.自己调用比自己小一个规模的自己. 2.有结束条件. 3.对问题的细化. ps: 大家可以通过这个效应感性的感受一下递归. 德罗斯特效应: ******************** ...

  5. 8皇后问题-递归-回溯(Java)

    目录 5.6 递归-八皇后问题(回溯算法) 5.6.1 解题思路 5.6.2 代码实现 第一遍的是跟着老师做的,所以添加了我自己大量的注解. 本次n皇后问题出自韩顺平的数据结构和算法 5.6 递归-八 ...

  6. n皇后问题python_N皇后问题—回溯算法经典例题

    N 皇后是回溯算法经典问题之一.问题如下:请在一个 ni n 的正方形盘面上布置 n 名皇后,因为每一名皇后都可以自上下左右斜方向攻击,所以需保证每一行.每一列和每一条斜线上都只有一名皇后. 最简单的 ...

  7. python经典案例-Python递归的经典案例

    目录 : 一.递归的简介 二.递归的经典应用 2.1 递归求阶乘 2.2 递归推斐波那契数列 2.3 二分法找有序列表指定值 2.4 递归解汉诺塔 前言: 当我们碰到诸如需要求阶乘或斐波那契数列的问题 ...

  8. Java黑皮书课后题第7章:***7.36(游戏:八皇后问题)经典的八皇后难题是要将八个皇后放在棋盘上,任何两个皇后都不能相互攻击(没有两个皇后在同行、同列、同一对角线)。编写程序显示一个解决方案

    7.36(游戏:八皇后问题)经典的八皇后难题是要将八个皇后放在棋盘上,任何两个皇后都不能相互攻击(没有两个皇后在同行.同列.同一对角线).编写程序显示一个解决方案 题目 题目描述 破题 题目 题目描述 ...

  9. 【算法】递归|迷宫回溯问题|八皇后问题

    [算法]递归|迷宫回溯问题|八皇后问题   迷宫回溯问题,要用动态的眼光来看待这个递归算法. package com.serein.recursion;/*** @author baichuan* @ ...

  10. [算法系列] 深入递归本质+经典例题解析——如何逐步生成, 以此类推,步步为营

    [算法系列] 深入递归本质+经典例题解析--如何逐步生成, 以此类推,步步为营 本文是递归系列的第三篇, 第一篇介绍了递归的形式以及递归设计方法(迭代改递归),;第二篇以递归为引子, 详细介绍了快排和 ...

最新文章

  1. html基础代码笔记,HTML基础笔记
  2. MySQL字符集的一个坑
  3. python是一门什么课程-Python究竟是一门怎样的语言,Python为什么这么火?
  4. phonegap在android中如何退出程序
  5. 【svn老玩家翻车了,git玩的不够6】git恢复本地误删的文件
  6. 使用Anemometer基于pt-query-digest将MySQL慢查询可视化
  7. TensorFlow.js快速入门
  8. updatebyprimarykeyselective返回什么是成功_嫦娥五号发射升空成功!!!
  9. SAM4E单片机之旅——22、GMAC和PHY的介绍与初始化
  10. xsd是什么文件,作用是什么?
  11. c语言上机南开100题,南开100题上机c语言
  12. 采集PLC数据转MQTT上报实现对PLC远程调试和远程程序上下载
  13. C# excel net core读取xlsm
  14. LFO 低频振荡器简介及其 C/C++ 实现
  15. 如何构建一个在线绘图工具:Feakin 是如何设计与构建的?
  16. mysql数据库学习之sql调优思路
  17. Linux shell编程自动化运维,三剑客之awk原理,语法,内部变量,格式化输出,模式和动作 详细解析
  18. 8b/10b编码方式(详细)总结附实例快速理解
  19. 天气预报到底能有多精细?一个小网格里的天气变化
  20. 【Easyui】Easyui Datagrid 排序

热门文章

  1. OC 5028B欧创芯原装,开关降压型大功率恒流驱动芯片
  2. 中国人工智能(AI)发展历程、AI产业重点发展区域、重点发展城市及中国AI产业地区发展总结及展望
  3. 随机生成器,从给定列表中随机抽取一个元素
  4. 【预训练语言模型】MacBERT: Revisiting Pre-trained Models for Chinese Natural Language Processing
  5. 【Keil 5】STM32F401CCU6 固件库配置(超详细教程)
  6. xul eclipse插件_将HTML元素添加到XUL插件
  7. 解决关于WPS插入公式后显示不全的问题
  8. Excel表格中如何换行
  9. springboot集成easypoi实现excel多sheet导出,并设置表头样式
  10. yarn lib cli.js SyntaxError: Unexpected token