问题描述->移步前面

主要公式fx=gx+hx
* g(x):针对于初始节点,到目标节点实际所需要付出的带价
* h(x):针对初始节点,到目标节点所需要的估计带价
* 在八皇后问题上,估计带价,是自己预定的,此处设置,其为皇后的碰撞对数,当然,估计是最优
* 的问题,就是0,无碰撞才是最优的结果。
注释都有,自行消化

package Heuristically_reserach_eight_queen;/*** @Author CRH* @Date 2020/11/25 10:05*/
public class Heuristically_research_egith_queen {/*** 启发式搜索,包含有序搜索算法,以及A*算法,* 主要公式fx=gx+hx* g(x):针对于初始节点,到目标节点实际所需要付出的带价* h(x):针对初始节点,到目标节点所需要的估计带价* 在八皇后问题上,估计带价,是自己预定的,此处设置,其为皇后的碰撞对数,当然,估计是最优* 的问题,就是0,无碰撞才是最优的结果。*/public static void main(String[] args){int[] queen_array = new int[8];int[] queen_array1 ={1,1,1,1,1,1,1,1};queen_array = init_queen(queen_array);//初始化完成// System.out.println("-----------测试点-----------------------"+function_g(queen_array1,7));begin_heuristcally(queen_array,0);}//开始查找public static void begin_heuristcally(int[] queen_array,int index){//其实和之前的评价函数类似,等同于,该点进行评估,然后针对,是否在该点进行落子,落皇后int hx = 0;int fx  = function_g(queen_array,index);;for (int i = 0; i < 8; i++) {queen_array[index]=i;int gx = function_g(queen_array,index);//这是该位置,实际评估的函数值//然后开始进行评定fx = gx +hx;if (fx>0){//假设gx>fx说明该点,不满足条件,与预估不符合,然后开始将其,复原,寻找下一节点,具体操作就是,将其往下,继续走}else if (fx == 0){//现行判断是否达到出口条件,然后考虑是否进入下一步if (index==7){//表示问题已经到了最后一步,但是还是最优,进而表明其实优解System.out.println("--------------------已经找到最优解-----------------------");print_queen(queen_array);break;}else {//表明,这个地方,为优解,进而向下一步进行->index+1;begin_heuristcally(queen_array,(index+1)%8);//直接进行取取余,不用担心下标越界}}}}//初始化函数public static int[] init_queen(int[] queen_array){for (int i = 0; i < queen_array.length; i++) {//queen_array[i] = (int)(Math.random()*8);queen_array[i] = 0;}return queen_array;}//实际函数的计算,参数position是针对该点前面的评价函数,进行评定,节省查找时间,进行优化public static int function_g(int[] one_geTi,int position){int flight_count = 0;for (int i = 0; i <= position-1; i++) {for (int j = i+1; j <= position; j++) {if (one_geTi[i]==one_geTi[j]|((j -i) == Math.abs(one_geTi[i]-one_geTi[j]))){flight_count++;}}}return flight_count;}public static void print_queen(int[] queen){for (int i = 0; i < queen.length; i++) {System.out.print(queen[i]+"   ");}System.out.println();}
}

结语:共勉

启发式搜索之八皇后问题相关推荐

  1. 递归算法学习系列之八皇后问题

    1.引子 中国有一句古话,叫做"不撞南墙不回头",生动的说明了一个人的固执,有点贬义,但是在软件编程中,这种思路确是一种解决问题最简单的算法,它通过一种类似于蛮干的思路,一步一步地 ...

  2. 回溯算法(Backtracking Algorithm)之八皇后问题

    文章目录 1. 回溯算法思想 2. 算法应用 2.1 八皇后问题 1. 回溯算法思想 前面讲过贪心算法并不能保证得到最优解,那怎么得到最优解呢? 回溯思想,有点类似枚举搜索.枚举所有的解,找到满足期望 ...

  3. 优化爬山法之八皇后问题

    ### 问题描述,八皇后 算法描述:爬山法,是以当前最优,可能会导致结果陷入到局部最优,所以本代码为改进版本的随机重启的爬山法.让陷入无限循环的对象,直接重启,进入新的 环境进行爬山.形象的将棋盘的每 ...

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

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

  5. Java数据结构算法之八皇后问题

    八皇后问题是由国际象棋手马克斯-贝瑟于1848年提出的问题,是回溯算法的经典案例. 问题表述为:在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上 ...

  6. Java学习之八皇后

    递归的第三个实际案例:八皇后 老师给的思路: //1.第一个皇后先放第一行第一列:     //2.第二个皇后放在第二行第一列.然后判断是否 OK,     //如果不 OK,则尝试放在第二列.第三列 ...

  7. LeetCode 51. N皇后 / 52. N皇后 II(回溯)

    1. 题目 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后问题的解决方案 ...

  8. 一文搞懂深度优先搜索、广度优先搜索(dfs、bfs)

    前言 你问一个人听过哪些算法,那么深度优先搜索(dfs)和宽度优先搜索(bfs)那肯定在其中,很多小老弟学会dfs和bfs就觉得好像懂算法了,无所不能,确实如此,学会dfs和bfs暴力搜索枚举确实利用 ...

  9. 程序员的算法课(3)-递归(recursion)算法

    一.什么是递归 递归是一种数学上分而自治的思想. 递归将大型复杂问题转化为与原问题相同但规模较小 的问题进行处理 递归需要有边界条件,当边界条件不满足时,递归继续进行:当边界条件满足时,递归停止 [百 ...

  10. c 递归下降识别程序_程序员的算法课(3)-递归(recursion)算法

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m0_37609579/article/ ...

最新文章

  1. CentOS 7 相关命令
  2. 把一张的数据添加到另一张中
  3. Docker - 在CentOS 7中安装Docker
  4. 论文浅尝 | ExCAR: 一个事件图知识增强的可解释因果推理框架
  5. 嵌入式nosql php,NoSQL 嵌入式数据库NeDB示例
  6. 如何查询以太信道接口_浅谈百兆千兆以太网物理层
  7. 一次性解决导航栏的所有问题
  8. mysql 执行计时_ps-top 用于MySQL的数据库top工具
  9. 网站发布(项目上线流程)
  10. 【Linux】04 实验笔记
  11. Java正则表达式实现计算器_Python利用正则表达式实现计算器算法思路解析
  12. 批处理变量输出时提示“ECHO处于关闭状态”
  13. 肇东一中2021高考成绩查询,肇东一中高考录取喜报
  14. 自己做网站有哪些方法呢?方法分享
  15. 在浏览器地址栏中,传数组参数
  16. JAVA我的世界怎么做成就_Editing 成就/Java版
  17. Canvas 画椭圆的方法
  18. 服务器错误信息36887,TLS 协议所定义的严重错误代码是 10。Windows SChannel 错误状态是 1203...
  19. 歌曲光辉岁月和弦走向探究
  20. 内地两例确诊病人尚有44名密切接触者未能寻获

热门文章

  1. cookie的工作原理
  2. PWM整流器仿真。 在simulink中搭建了PWM整流器,采用电压电流双闭环控制,实现了网侧电压与电流同相位
  3. win10环境变量Path单行显示改回多行列表显示
  4. linux查看实时的日志命令,Linux实时查看日志的四种命令详解
  5. 有限元分析类毕业论文文献(推荐10篇)
  6. 24种不同的ITF条形码字体Interleaved 2 of 5 Barcode Font Advantage Package
  7. 哔哩哔哩助手 for Mac说明书
  8. 金融数据安全分类分级解决方案
  9. Java实现在线SQL编程【完整版】
  10. 收藏有关信号处理的博客