python深度优先算法 八皇后_八皇后问题——DFS(深度优先搜索)
八皇后问题,是在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(深度优先搜索)相关推荐
- java计算八皇后_八皇后java算法
public class NQueens { public static int num = 0; // 累计方案总数 public static final int MAXQUEEN = 5;// ...
- python英文语义角色标注_八款中文词性标注工具使用及在线测试
结束了中文分词工具的安装.使用及在线测试,开启中文词性标注在线测试之旅,一般来说,中文分词工具大多数都附带词性标注功能的,这里测试了之前在AINLP公众号上线的8款中文分词模块或者工具,发现它们都是支 ...
- python使用opencv查找轮廓_(八)OpenCV-Python学习—轮廓查找,绘制和拟合
针对物体轮廓,opencv还提供了一些相关的函数,来处理轮廓查找,绘制,拟合,以及计算轮廓周长和面积等,详细介绍如下: 1. 寻找和绘制轮廓 opencv的findContours()能寻找图片中的轮 ...
- python基础教程怎么看_八、给小白看的第一篇Python基础教程
本文是第一篇,一共四篇打下Python基础 「@Author:Runsen」 「@Date:Writern By 2019/04/15 and supplied By 2020/3/31」 「@公众号 ...
- python写算法太慢_程序运行慢?你怕是写的假 Python
Python程序运行太慢的一个可能的原因是没有尽可能的调用内置方法,下面通过5个例子来演示如何用内置方法提升Python程序的性能. 1. 数组求平方和 输入一个列表,要求计算出该列表中数字的的平方和 ...
- python俄罗斯方块算法详解_用 Python 写一个俄罗斯方块游戏 (
@@ -2,34 +2,34 @@ > * 原文作者:[Dr Pommes](https://medium.com/@pommes) > * 译文出自:[掘金翻译计划](https://g ...
- pcb 假八层_八层板的成本却只六层的性能,PCB设计遭遇假八层该怎么办?
在<PCB的筋骨皮>一文中,我们提出了当板厚在1.6mm及以上时,怎样避免使用假八层的叠层,而导致PCB成本增加的问题.mb5ednc 由于大家的回答很踊跃,看来这个问题还是比较典型的.在 ...
- python数据挖掘算法的书籍_机器学习和数据挖掘推荐书单
有了这些书,再也不愁下了班没妹纸该咋办了.慢慢来,认真学,揭开机器学习和数据挖掘这一神秘的面纱吧! <机器学习实战> 本书第一部分主要介绍机器学习基础,以及如何利用算法进行分类,并逐步介绍 ...
- python中算法与数学_中国古代数学算法的Python实现
看了这篇<没有定理的中国古代数学,如何站在世界之巅?>.虽然我觉得题目很标题党,不过里面的内容很有趣啊,讲解了中国古代数学里的几个算法.由于我正在学Python,所以自然就拿来练手了. 可 ...
最新文章
- Reactor模式与Proactor模式
- python在线读-Python电子书免费分享
- python中字符串的几种表达方式(用什么方式表示字符串)
- 浅谈php中使用websocket
- C#的发展历程第五 - C# 7开始进入快速迭代道路
- oracle根据当前月份往前,oracle获取系统日期--当前时间+前一天+当前月+前一个月...
- buck电路_2步避免BUCK电路中的“地弹”
- 如何通过JNI传递对象执行回调
- python中rawinput用法_Python 中 input()用法 以及与raw_input() 的区别
- 算法: 最大矩形面积85. Maximal Rectangle
- 标题生成图片插件(火车头采集器:根据文章标题生成相关图片)
- Mac系统快捷键大全
- pcm系统设计及matlab仿真实现,DOC:25页毕业设计PCM系统设计及MATLAB仿真实现.doc文档优秀范文...
- mysql按1-12月查询统计数据
- 把笔记本改造成无线路由器 —— 手机抓包牛刀小试
- 如何快速发表职称论文
- 比例阀测试仪RT-T101
- frontiers出版社投稿记录(附状态变化)
- faq页面 html csdn,jQuery和css3简单实用的FAQ问答页面模板
- XML介绍与使用及简单注解
热门文章
- Linux三大主流网站构建平台,Linux快速构建LAMP网站平台
- 第四十二篇 面对对象进阶
- 微信小程序 - 使用npm(第三方包)
- hibernate hql语句 投影查询的三种方式
- Java enum枚举类型
- DM8168 编译filesystem步骤
- PowerDesigner的数据类型
- SQL Server 数据库使用备份还原造成的孤立用户和对象名‘xxx’无效的错误的解决办法...
- cordova打包app后发请求出现 Provisional headers are shown的问题
- JAVA 入门(一)