八皇后问题,是在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法?

算法思路:

八皇后问题实质为一种深度优先(DFS)搜索问题。

可分为两个子函数来解决该问题。第一个子函数用于在棋盘上放置皇后。第二个子函数用于检查摆放过程中有没有违反放置规则。

实际运行过程,为放置第一层上的皇后,进入下一层然后先对上一层检查,合法则进行下一行的放置。反之则退出递归调用,将非法行上的皇后移位。

算法具体描述:

放置皇后函数void Queen_Move(int i);

void Queen_Move(int i)

{

int m = 0;//每行放置的格子位置

if (i == 8)//弹出递归的条件(放完了第8行)和打印结果;

{

map++;//总的放置方法个数

cout << "Queens Location :" << map << endl;

Print();//打印函数

return;}

for (m = 0; m < 8; m++)//一行有八个格子,循环八次

{

if (Check(i,m) == 1)//检验上一次摆放合法后进入

{

Board[i][m] = 1;//放置皇后

Queen_Move(i + 1);//进入下一层放置皇后

Board[i][m] = 0;//进入递归下一层后,清除上一层数据,发现错误后正确进入下一个格子

}

}

}

检查摆放合法函数:int Check(int k, int j)

int Check(int k, int j)

{

//由于以行为单位进行递归放置,因此不会出现一行中放置多个Queen的情况

for (int i = 0; i < 8; i++) //检查列

{

if (Board[i][j] == 1)

{

return 0;

}

}

for (int i = k - 1, m = j - 1; i >= 0 && m >= 0; i--, m--)

//检查左对角线

{

if (Board[i][m] == 1)

{

return 0;

}

}

for (int i = k - 1, m = j + 1; i >= 0 && m <= 7; i--, m++)

//检查右对角线

{

if (Board[i][m] == 1)

{

return 0;

}

}

return 1;

}

八皇后问题抽象出来的模型,实质为一种以深度为单位进行相关检索的程序设计问题。棋盘的每一层即可被抽象为一层,共八层,从第一层开始寻找,合理进入下一层,并寻找前面摆放是否合法。

python深度优先算法 八皇后_八皇后问题——DFS(深度优先搜索)相关推荐

  1. java计算八皇后_八皇后java算法

    public class NQueens {  public static int num = 0; // 累计方案总数 public static final int MAXQUEEN = 5;// ...

  2. python英文语义角色标注_八款中文词性标注工具使用及在线测试

    结束了中文分词工具的安装.使用及在线测试,开启中文词性标注在线测试之旅,一般来说,中文分词工具大多数都附带词性标注功能的,这里测试了之前在AINLP公众号上线的8款中文分词模块或者工具,发现它们都是支 ...

  3. python使用opencv查找轮廓_(八)OpenCV-Python学习—轮廓查找,绘制和拟合

    针对物体轮廓,opencv还提供了一些相关的函数,来处理轮廓查找,绘制,拟合,以及计算轮廓周长和面积等,详细介绍如下: 1. 寻找和绘制轮廓 opencv的findContours()能寻找图片中的轮 ...

  4. python基础教程怎么看_八、给小白看的第一篇Python基础教程

    本文是第一篇,一共四篇打下Python基础 「@Author:Runsen」 「@Date:Writern By 2019/04/15 and supplied By 2020/3/31」 「@公众号 ...

  5. python写算法太慢_程序运行慢?你怕是写的假 Python

    Python程序运行太慢的一个可能的原因是没有尽可能的调用内置方法,下面通过5个例子来演示如何用内置方法提升Python程序的性能. 1. 数组求平方和 输入一个列表,要求计算出该列表中数字的的平方和 ...

  6. python俄罗斯方块算法详解_用 Python 写一个俄罗斯方块游戏 (

    @@ -2,34 +2,34 @@ > * 原文作者:[Dr Pommes](https://medium.com/@pommes) > * 译文出自:[掘金翻译计划](https://g ...

  7. pcb 假八层_八层板的成本却只六层的性能,PCB设计遭遇假八层该怎么办?

    在<PCB的筋骨皮>一文中,我们提出了当板厚在1.6mm及以上时,怎样避免使用假八层的叠层,而导致PCB成本增加的问题.mb5ednc 由于大家的回答很踊跃,看来这个问题还是比较典型的.在 ...

  8. python数据挖掘算法的书籍_机器学习和数据挖掘推荐书单

    有了这些书,再也不愁下了班没妹纸该咋办了.慢慢来,认真学,揭开机器学习和数据挖掘这一神秘的面纱吧! <机器学习实战> 本书第一部分主要介绍机器学习基础,以及如何利用算法进行分类,并逐步介绍 ...

  9. python中算法与数学_中国古代数学算法的Python实现

    看了这篇<没有定理的中国古代数学,如何站在世界之巅?>.虽然我觉得题目很标题党,不过里面的内容很有趣啊,讲解了中国古代数学里的几个算法.由于我正在学Python,所以自然就拿来练手了. 可 ...

最新文章

  1. Reactor模式与Proactor模式
  2. python在线读-Python电子书免费分享
  3. python中字符串的几种表达方式(用什么方式表示字符串)
  4. 浅谈php中使用websocket
  5. C#的发展历程第五 - C# 7开始进入快速迭代道路
  6. oracle根据当前月份往前,oracle获取系统日期--当前时间+前一天+当前月+前一个月...
  7. buck电路_2步避免BUCK电路中的“地弹”
  8. 如何通过JNI传递对象执行回调
  9. python中rawinput用法_Python 中 input()用法 以及与raw_input() 的区别
  10. 算法: 最大矩形面积85. Maximal Rectangle
  11. 标题生成图片插件(火车头采集器:根据文章标题生成相关图片)
  12. Mac系统快捷键大全
  13. pcm系统设计及matlab仿真实现,DOC:25页毕业设计PCM系统设计及MATLAB仿真实现.doc文档优秀范文...
  14. mysql按1-12月查询统计数据
  15. 把笔记本改造成无线路由器 —— 手机抓包牛刀小试
  16. 如何快速发表职称论文
  17. 比例阀测试仪RT-T101
  18. frontiers出版社投稿记录(附状态变化)
  19. faq页面 html csdn,jQuery和css3简单实用的FAQ问答页面模板
  20. XML介绍与使用及简单注解

热门文章

  1. Linux三大主流网站构建平台,Linux快速构建LAMP网站平台
  2. 第四十二篇 面对对象进阶
  3. 微信小程序 - 使用npm(第三方包)
  4. hibernate hql语句 投影查询的三种方式
  5. Java enum枚举类型
  6. DM8168 编译filesystem步骤
  7. PowerDesigner的数据类型
  8. SQL Server 数据库使用备份还原造成的孤立用户和对象名‘xxx’无效的错误的解决办法...
  9. cordova打包app后发请求出现 Provisional headers are shown的问题
  10. JAVA 入门(一)