文章目录

  • 八皇后问题
  • 解决思路
  • 代码实现
  • 运行结果

八皇后问题

八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。


解决思路

①第一个皇后先放第一行第一列。

②第二个皇后放在第二行第一列、然后判断是否OK,如果不0K, 继续放在第二列、第三列、依次把所有列都放完,找到一个合适。

③继续第三个皇后, 还是第一列、第二列…直到第8个皇后也能放在一个不冲突的位置,算是找到了一个正确解。

④当得到一个正确解时,在栈回退到上一个栈时,就会开始回溯,即将第一个皇后,放到第一列的所有正确解,全部得到。

⑤然后回头继续第-一个皇后放第二列,后面继续循环执行①②③④的步骤。


代码实现

/*** @Author: Yeman* @Date: 2021-10-31-15:48* @Description:*/
public class Queue8 {int max = 8; //8个皇后int[] arr = new int[max]; //下标为第几个(即第几行),值为第几列static int count = 0; //多少个放法static int judgeCount = 0; //判断了多少次public static void main(String[] args) {Queue8 queue8 = new Queue8();queue8.check(0);System.out.printf("一共有%d种解法\n",count);System.out.printf("一共判断了%d次",judgeCount);}//用来放置第n个皇后private void check(int n){if (n == max){ //n为8相当于是第九个皇后了,说明已经全部放好了print();return;}for (int i = 0; i < arr.length; i++) {arr[n] = i;if (judge(n)){ //不冲突check(n+1);}}}//用来第n个皇后判断与前面的所有皇后是否冲突private boolean judge(int n){judgeCount++;for (int i = 0; i < n; i++) {//是否同列同斜线if (arr[i] == arr[n] || Math.abs(arr[i]-arr[n]) == Math.abs(i-n)){return false;}}return true;}//输出每一种放法private void print(){count++;for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}System.out.println();}
}

运行结果

(截取部分)

Java实现递归回溯,解决八皇后问题,数据结构与算法相关推荐

  1. 递归回溯解决八皇后问题

    文章目录 前言 八皇后问题 问题解析 代码实现 完整代码 前言 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题.该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇 ...

  2. 递归/回溯:八皇后问题N-Queens

    N皇后问题是计算机科学中最为经典的问题之一,该问题可追溯到1848年,由国 际西洋棋棋手马克斯·贝瑟尔于提出了8皇后问题. 将N个皇后放摆放在N*N的棋盘中,互相不可攻击,有多少种摆放方式,每种摆 放 ...

  3. 数据结构:回溯--解决八皇后问题

    public class Queue8 {int max = 8;int count = 1;// 定义数组,保存皇后放置位置的结果,比如arr = {0,4,7,5,2,6,1,3}int[] ar ...

  4. 回溯法在解决八皇后问题中的应用

    回溯法:有这样一类题目,它们要求在相对问题的输入规模按照指数速度增长(或者更快)的域中,找出一个具有指定特性的元素.例如:在图顶点的所有排列中求一个哈密顿回路,在背包问题的一个实例中求其中最有价值的物 ...

  5. 回溯算法解决八皇后_4皇后问题和使用回溯算法的解决方案

    回溯算法解决八皇后 4-皇后问题 (4 - Queen's problem) In 4- queens problem, we have 4 queens to be placed on a 4*4 ...

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

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

  7. 有趣的数据结构算法12——利用递归解决八皇后问题

    有趣的数据结构算法12--利用递归解决八皇后问题 题目复述 解题思路 实现代码 GITHUB下载连接 本次教程主要讲述如何利用递归解决八皇后问题,它和汉诺塔一样让人很难过. 题目复述 据说西洋棋手都具 ...

  8. 遗传算法解决八皇后问题(java源码)

    本文源码下载链接:https://download.csdn.net/download/goulvjiang3176/11221063 另有贪心算法解决八皇后问题的源码下载链接:https://dow ...

  9. 用lua解决八皇后问题

        要解决八皇后问题,首先必须认识到每一行中只能有一个皇后.因此,可以用一个由8个数字组成的简单数组来表示可能的解决方案.例如,数组{3,7,2,1,8,6,5,4}表示皇后在棋盘中的位置分别是( ...

  10. 运用全排列的方法解决八皇后问题

    运用全排列的方法解决八皇后问题,可以分为两部分:全排列和八皇后,下面我将分开说明两个步骤. 首先说明八皇后: 第一步:就是把皇后按照0到8编号,然后对八个皇后进行全排列,一共有40320种排列方式. ...

最新文章

  1. 超越Google,快手落地业界首个万亿参数推荐精排模型
  2. java统计分析_数据统计(java实现)
  3. ASP.NET MVC 导入Excel文件
  4. 别再乱用 Prometheus 联邦了,分享一个 Prometheus 高可用新方案
  5. 大剑无锋之delete、drop、truncate【面试推荐】
  6. 如何查找SAP Cloud for Customer UI页面对应的技术模型明细
  7. 【批处理】肉鸡扫描脚本
  8. Java中文(汉子)转换拼音
  9. WDM驱动程序的基本结构和实例
  10. tp5 上传路径反斜杠的问题 ,反斜杠json_decode函数输出出错的
  11. ROS学习笔记---ros的通信机制
  12. 你就不怕此生就这样?
  13. OIO下的socket传输文件
  14. YOLOv5实现吸烟行为检测
  15. CAD梦想画图中的“阵列命令”
  16. 毕业一年经历两次大裁员......
  17. java单链表反转(头插法)详解
  18. 十九 Redis AOF持久化
  19. vue项目设置服务器地址,vue项目配置后端服务器地址
  20. Xv6 I/O 与文件描述符

热门文章

  1. OpenJPA:内存泄漏案例研究
  2. 再见,再见,5 * 60 * 1000 //五分钟,再见,再见
  3. Java EE 6示例– Galleria
  4. Solaris是出色的Java开发平台的原因
  5. Servlet中获取请求体的数据
  6. Linux 命令之 du -- 显示每个文件和目录的磁盘使用空间/所占用的磁盘空间大小/所使用的磁盘空间大小/查看文件和目录的大小
  7. android 技能标签功能_iOS和Android用户体验设计差异
  8. linux 丢包多少正常_Linux 问题故障定位,看看这篇
  9. android 6.0 dm-verity技术,Android 7.0安全性大幅提升,要求严格强制执行验证启动
  10. react打包后图片丢失_React中型项目的优化实践