八皇后问题各种解法分析
最近学习算法分析,突然对八皇后问题十分感兴趣,下面是我研究一段时间后的思想汇总。希望能够引起各位算法爱好者的共鸣,当然如果有什么遗漏之处希望互相交流。
一:回溯法
这种算法想必学习计算机算法分析与设计的人都应该知道,说白了,这个算法就是一个搜索算法,对一棵树进行深度优先搜索,但是在搜索的过程中具有自动终止返回上一层继续往下搜索的能力,这个算法其实就是一个搜索树,对部分节点进行了剪枝是一种可行的算法,对八皇后这样皇后数较少的问题还能够解决,如果皇后数再大一点就无能为力了,当然我们通过这学习了一种算法。至于具体算法怎么实现在此就不一一详述了,因为大部分网站都有具体的源码,核心思想也基本相同,只是编程应用的数据结构有所不同而已。
二:概率算法
这种算法网络上很少有,在此我只是提供一点思路供爱好者探讨。
基本思想:首先应用随机函数在一个8*8的矩阵中放入合适的4个皇后(即一半的皇后)然后再应用之前的回溯的方法进行搜索,随后循环这样的一个过程,当时间容许的情况下,很快就可以找到满足所有的解。当然这种方法对回溯法只是进行了一点点的改动,但时间复杂度上将有很大的提高。算法源码在此也不予提供,有兴趣的可以与我联系。
三:A*算法
这种算法原本是人工智能里求解搜索问题的解法,但八皇后问题也同样是一个搜索问题,因此可以应用这种方法来进行求解。这里关于A*算法的定义以及一些概念就不提供了,大家可以上网进行搜索,网上有很多关于A*算法的详细介绍。如果有兴趣的朋友可以借阅一本人工智能的书籍上面有关于A*算法求解八皇后问题的详细解答过程,在此我就不多说了,我只是提供一种学习的思路。
四:广度优先搜索
这个是和回溯法搜索相反的一种方法,大家如果学过数据结构的应该知道,图的搜索算法有两种,一种是深度优先搜索,二种是广度优先搜索。而前面的回溯算法回归到图搜索的本质后,发现其实是深度优先搜索,因此必定会有广度优先搜索解决八皇后问题,由于应用广度优先搜索解决八皇后问题比应用深度优先搜索其空间复杂度要高很多,所以很少有人去使用这种方法,但是这里我们是来学习算法的,这种算法在此不适合,不一定在其他的问题中就不适合了,有兴趣的朋友可以参考任何一本数据结构的数据上面都有关于广度优先搜索的应用。
总结:上面我对八皇后问题的这种算法只是起了一点抛砖引玉的作用,没有深入讲解,一是自己时间有限,二是自己研究的也不够彻底,在此只能提供一点点解题思路希望大家看到后可以有一点前进的方向,最后说一下其实八皇后问题还可以应用一些更加高级的算法进行求解,例如遗传算法,蚁群算法,粒子群算法等等,这些算法我还在研究中希望有兴趣的朋友可以和我交流。以上都仅为个人观点,如果错误之处请指正本人不胜感激。
八皇后问题各种解法分析相关推荐
- Java实现八皇后问题的解法(一维数组版本)
最近接触了数据结构与算法,这本该是计算机专业的同学大一就掌握的课程,可我现在才算正式接触,感到惭愧万分.但闻道有先后,术业有专攻.本篇博客开始记录本人学习数据结构与算法这门课的点滴,希望自己能坚持下去 ...
- python8皇后不攻击问题_python 八皇后问题的解法(深度搜索)
共本文介绍如何用深度搜索的方式求解8皇后(其实也可以求解N皇后)问题的解 八皇后问题描述 在国际想起的规则中,皇后能攻击八个方向上的棋子,而且不受距离限制. 皇后的攻击方向如下图所示: 八皇后问题则是 ...
- 八皇后问题分析与Java实现
原文链接:传送门 八皇后问题 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即: ...
- C语言编程统计八皇后问题的解的个数,八皇后问题C语言解法
偶遇八皇后问题,随即自己写了一个仅供参考 #include #include #define SIZE 8 void Circumsribe(int(*checkerboard)[SIZE], int ...
- 十二、八皇后问题(递归回溯)
一.八皇后问题介绍 (本次使用回溯算法解决,之后会用贪心算法优化) 在 8×8 格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行. 同一列或同一斜线上,问有多少种摆法(9 ...
- java递归-八皇后问题(回溯算法)
1.八皇后问题介绍 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于 1848 年提出:在 8×8 格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任 ...
- 数据结构 - 递归 回溯算法(八皇后问题)
游戏地址自己写完了可以根据结果去测试一下. 算法分析 八皇后问题算法思路分析 1)第一个皇后先放第一行第一列 2)第二个皇后放在第二行第一列.然后判断是否OK, 如果不OK,继续放在.第二列.第三列. ...
- 八皇后问题详解(最短代码)
八皇后问题算法分析: 分析1:八皇后由一个64格的方块组成,那么把八个皇后放入不考虑其他情况利用穷举法,有8^64种 可能. 分析2:显然任意一行有且仅有1个皇后,使用数组queen[0->7] ...
- 回溯算法解决八皇后问题(JAVA实现)
送给程序猿们一句话 <拥有水滴石穿的坚持:懂得聚沙成塔的积累:磨练坚韧不拔的意志:学习脚踏实地的奋斗:提升立世做人的技巧:突破自我设限的障碍.> 文章目录 背景 问题解决 思路 什么是回溯 ...
最新文章
- 挑战NLP、量子计算难题,300多支本科生队伍同场角逐,2020 ASC超算竞赛一触即发...
- swing java管理系统_Java swing实现酒店管理系统
- Kafka0.10.2.0分布式集群安装
- c++,当const char*为0时,不能将其直接赋给string
- 【总结】循序渐进,有三AI不得不看的技术综述(超过100篇核心干货)
- 27 款经典的CSS 框架
- 555定时器,你知道它的功能有多强大吗?
- Python中的一些特殊函数
- c语言定义的几种易错的说明
- chrome 非安全模式解决开发跨域问题
- 美团员工被指用钓鱼邮件获拼多多薪资;华为回应暂无其它手机厂商接入HarmonyOS;GCC 放弃版权转让政策|极客头条...
- 20.卷1(套接字联网API)---广播
- SECS/GEM如何开发
- 密码键盘介绍二:主密钥和工作密钥的导入
- html head标签详解
- redis为什么快?
- 初级软件开发人员进修必备的20本书(上)
- 《途客圈创业记:不疯魔,不成活》一一2.11 途客圈旅行助手
- 文件批量重命名001开始的办法
- 经典名言名句(摘抄)