【算法】递归|迷宫回溯问题|八皇后问题
  迷宫回溯问题,要用动态的眼光来看待这个递归算法。

package com.serein.recursion;/*** @author baichuan* @version 1.0*/
public class MiGong {public static void main(String[] args) {//定义一个二维数组表示迷宫int[][] map = new int[11][10];//初始化这个迷宫,1表示墙for (int i = 0; i < 11; i++) {map[i][0] = 1;map[i][9] = 1;}for (int i = 0; i < 10; i++) {map[0][i] = 1;map[10][i] = 1;}//设置障碍map[4][1] = 1;map[4][2] = 1;map[4][3] = 1;map[3][3] = 1;map[2][3] = 1;map[2][2] = 1;//看迷宫效果for (int i = 0; i < 11; i++) {for (int j = 0; j < 10; j++) {System.out.print(map[i][j] + "  ");}System.out.println();}//开始走迷宫setWay(map,1,1);System.out.println("递归算法计算后的迷宫,看通路:");for (int i = 0; i < 11; i++) {for (int j = 0; j < 10; j++) {System.out.print(map[i][j] + "  ");}System.out.println();}}//走迷宫方法//约定1:转态0:没走过  状态1:墙  状态2:通路  状态3:走过证明是死路不能再走。//约定2.走迷宫的策略为:下->右->上->左,走不通则回溯//约定3.小球起点[1][2],终点[9][8]public static boolean setWay(int[][] point,int i,int j){if (point[9][8] == 2){//走到终点了,通路形成return true;}else {//没到终点,业务逻辑if (point[i][j] == 0){//如果这一点还没有走过//先默认这一点是通路point[i][j] = 2;if (setWay(point, i + 1, j)){return true;//向右走} else if (setWay(point, i, j + 1)) {return true;//向下走} else if (setWay(point, i - 1, j)) {return true;//向上走} else if (setWay(point, i, j - 1)) {return true;//向左走}else {//在这一点上下左右均不可走,说明是死地,这一点不能走point[i][j] = 3;return false;}}else {//r若不是0,那么1,3是不能走的,2已经走过也没必要重复return false;}}}}

测试截图

八皇后问题
  用一维数组模拟八皇后的摆法。认为数组的下标代表行数。

package com.serein.recursion;/*** @author baichuan* @version 1.0*/
public class Queen8 {int max = 8;int[] arr = new int[max];static int count = 0;static int judgeCount = 0;public static void main(String[] args) {Queen8 queen8 = new Queen8();queen8.check(0);System.out.println("一共有 " + count + " 种解法" );System.out.println("一共判断冲突的次数为 " + judgeCount + " 次");}//放第n个皇后private void check(int n){if (n == max){//8个皇后都已经放好print();return;}//开始放皇后for (int i = 0; i < max; i++) {//先把这个皇后放到这一行的第1列arr[n] = i;//看这个位置是否有冲突if (judge(n)){//不冲突,那么接着放下一个皇后check(n + 1);}//若冲突,会继续走arr[n] = i的逻辑,就是把这个皇后 放到本行的 刚才放的那个位置的后一个位置}}//检查看当前皇后和前面已经摆好的皇后位置是否冲突//n表示第几个皇后private boolean judge(int n){judgeCount++;for (int i = 0; i < n; i++) {//arr[i] == arr[n]判断第n个皇后是否和前面的第n-1 个皇后在同一列//Math.abs(n - i) == Math.abs(arr[n] - arr[i])判断换后中是否有在同一斜线上//不必判断是否在同一行,因为n即代表是第几个皇后,也代表第几行,是递增的,不会重复if (arr[i] == arr[n] || Math.abs(n - i) == Math.abs(arr[n] - arr[i])){return false;}}return true;}//把得到的结果输出private void print(){count++;for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}System.out.println();}}

测试截图

【算法】递归|迷宫回溯问题|八皇后问题相关推荐

  1. 【Java数据结构与算法】第五章 递归、迷宫回溯和八皇后问题

    第五章 递归 文章目录 第五章 递归 一.递归 1.概念 2.代码实现 3.递归的规则 二.迷宫回溯 1.要求 2.代码实现 三.八皇后问题 1.介绍 2.思路 3.代码实现 一.递归 1.概念 简单 ...

  2. 数据结构:递归(迷宫回溯、八皇后)

    求阶乘 不死神兔 public class Quean {//定义有几个皇后int Max;//定义一个数组存放皇后的位置int[] arr = new int[Max];int count=0;pu ...

  3. 算法学习笔记之三:八皇后问题(递归、回溯)

    (一)题记 从去年下半年开始找工作,大大小小也被"鄙"试."面"试了n多回了.说实话只怪自己并未对常见的笔试题.面试题进行准备,导致败下阵来.一门学问要想学透学 ...

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

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

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

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

  6. 使用回溯算法分析八皇后问题

    一. 八皇后问题? 在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法? 二.思路 1.首先如何解决递归问题呢? *找到递推公式* ...

  7. 数据结构之栈与递归的应用(八皇后递归解法)

    前面几节讲述了递归的一般应用,本节讲一下递归的另一个重要的应用场合回溯算法,利用函数调用的活动对象可以保存回溯算法中重要的变量信息 . 递归与回溯 递归在程序设计中也常用于需要回溯算法的场合. 回溯算 ...

  8. ACM:回溯,八皇后问题,素数环

    (一)八皇后问题 (1)回溯 #include <iostream> #include <string>#define MAXN 100using namespace std; ...

  9. 回溯递归算法----八皇后问题

    前,有皇帝.就拿八皇后.由此产生的一系列问题,凌乱.由此产生的八皇后问题.哈哈 开玩笑~~~~ 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848 ...

最新文章

  1. submodule切换分支_git子模块分支会随主项目的分支切换吗?
  2. 分布式数据库的模式结构介绍​
  3. Scala学习之字符串篇(六):使用正则表达式
  4. MyBatis学习总结(8)——Mybatis3.x与Spring4.x整合
  5. redis技术分享ppt_一线互联网架构师技术分享:基于redis的分布式锁实现
  6. ubuntu jdk 安装 【转载】
  7. Paxos在大型系统中常见的应用场景
  8. 使用Cron和PHP检测网页是否被篡改
  9. 焊接知识与技能(嵌入式硬件篇)
  10. ElasticSearch分布式搜索引擎安装教程
  11. 计算机应用格式工厂部分教案,格式工厂教学案.doc
  12. C++中标准模板库STL基本概念
  13. echarts实现3D地图,轮播功能、背景图片、鼠标悬浮展示数据,附源码!
  14. 爬取天气数据进行绘制折线图
  15. SAR 101:合成孔径雷达简介
  16. 6篇干货带你学会用vue开发小程序——mpvue
  17. python爬取搜狗图片
  18. python计算方位角_[宜配屋]听图阁
  19. ATtiny13与Proteus仿真-电池电量指示仿真
  20. win7 linux双系统引导修复工具,给你传授双系统引导修复工具【搞定指南】

热门文章

  1. R语言生存分析:Cox回归
  2. 苹果开发者账号注册申请流程
  3. [附源码]java毕业设计咖啡销售管理系统-
  4. 微信计算机发展的表征是什么意思,【表征】的意思是什么?【表征】是什么意思?...
  5. java 音频播放器_JAVA音频播放器问题
  6. IS_REACHABLE
  7. 战神引擎mud2没有mysql文件_战神引擎架设不要(MongoDB)芒果数据库配置教程
  8. Future FMCG2021 ,爱莫受邀智话实体零售数字新发展
  9. 艾司博讯:拼多多判断正品的标准是什么
  10. 原生实现点击li变颜色