http://blog.sina.com.cn/s/blog_4ad7c2540101gjrc.html

回溯法是一种不断试探且及时纠正错误的搜索方法,下面的求解过程采用回溯法。从入口出发,按某一方向向前探索,若能走通(未走过的),即某处可以到达,则到达一个新点,否则试探下一个方向;若所有的方向均没有通路,则沿原路返回前一点,换下一个方向继续试探,直到所有可能的通路都搜索到,或找到一条通路,或无路可走又返回到入口点。这里可以用一个栈来实现,每走一步,将该位置压入栈中,若该点无路可走,则出栈返回上一位置。
需要解决的四个问题:
(1)表示迷宫的数据结构设迷宫为m行n列,利用数组maze[m][n]来表示一个迷宫,maze[i][j]=0或1,其中0表示通路,1表示不通。迷宫该数组四边都为1,代表迷宫四周都是墙。这样就可以保证每个点都有8个方向可以试探。入口为(1,1),出口为(6,8)1,1,1,1,1,1,1,1,1,11,0,1,1,1,0,1,1,1,11,1,0,1,0,1,1,1,1,11,0,1,0,0,0,0,0,1,11,0,1,1,1,0,1,1,1,11,1,0,0,1,1,0,0,0,11,0,1,1,0,0,1,1,0,11,1,1,1,1,1,1,1,1,1
(2)试探方向迷宫中间每个点都有8个方向可以试探。其增量数组可以用一个8*2的二维数组move表述,表示对当前点而言,它周围8个点的行和列的坐标偏移量.具体值如下:x  y0  0  11   1    12   1    03   1   -14   0   -15  -1   -16  -1    07  -1    1
在move数组中,x表示横坐标的增量,y表示纵坐标的增量。(3)栈中存放元素的设计栈中所存放的元素应该包含所到达的每点的坐标以及从该点沿哪个方向向下走的,可用一个类表示:
class Step{int x,y,d;public Step(int x,int y,int d) {this.x = x;//横坐标this.y = y;//纵坐标this.d = d;//方向
     }}
(4)防止重复到达某点而发生死循环使maze[i][j]置为-1,以便区别为达到的点,同样也可以防止走重复点的作用。
源码如下:
package com.test;import java.util.Stack;
class Step{int x,y,d;public Step(int x,int y,int d) {this.x = x;//横坐标this.y = y;//纵坐标this.d = d;//方向
    }
}public class MazeTest {public static void main(String[] args) {// 迷宫定义int[][] maze = {{1,1,1,1,1,1,1,1,1,1},{1,0,1,1,1,0,1,1,1,1},{1,1,0,1,0,1,1,1,1,1},{1,0,1,0,0,0,0,0,1,1},{1,0,1,1,1,0,1,1,1,1},{1,1,0,0,1,1,0,0,0,1},{1,0,1,1,0,0,1,1,0,1},{1,1,1,1,1,1,1,1,1,1}};int[][] move = {{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}};Stack s = new Stack();Stack s1 = new Stack();int a = path(maze, move, s);while(!s.isEmpty()){Step step = s.pop();System.out.println(step.x+":"+step.y);}}public static int path(int[][] maze,int[][] move,Stack s){Step temp = new Step(1,1,-1); //起点
        s.push(temp);while(!s.isEmpty()){temp = s.pop();int x = temp.x;int y = temp.y;int d = temp.d+1;while(d<8){int i = x + move[d][0];int j = y + move[d][1];if(maze[i][j] == 0){    //该点可达temp = new Step(i,j,d); //到达新点
                    s.push(temp);x = i;y = j;maze[x][y] = -1;  //到达新点,标志已经到达if(x == 6 && y == 8){return 1;  //到达出口,迷宫有路,返回1}else{d = 0;  //重新初始化方向
                    }}else{d++; //改变方向
                }}}return 0;}}

转载于:https://www.cnblogs.com/davidwang456/p/3486637.html

java实现迷宫算法--转相关推荐

  1. java迷宫_java实现迷宫算法--转

    沿着所有方向进行探测,有路径则走,没有路径则从栈中回退. 回溯法是一种不断试探且及时纠正错误的搜索方法,下面的求解过程采用回溯法.从入口出发,按某一方向向前探索,若能走通(未走过的),即某处可以到达, ...

  2. java迷宫算法栈_java - 用Java创建迷宫求解算法 - 堆栈内存溢出

    我被分配了在Java中创建迷宫求解器的任务. 这是作业: Write an application that finds a path through a maze. The maze should ...

  3. java迷宫鼠_C++ 迷宫算法(迷宫老鼠)

    题目:   迷宫是一个矩形区域,它有一个入口和一个出口.在迷宫的内部包含不能穿越的墙或障碍.在图5 - 8所示的迷宫中,障碍物沿着行和列放置,它们与迷宫的矩形边界平行.迷宫的入口在左上角,出口在右下角 ...

  4. java老鼠走迷宫算法_老鼠走迷宫java算法

    说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表 示老鼠的行走路径,试以程式求出由入口至出口的路径. 解法老鼠的走法有上.左.下.右四个方向,在每前进一格之后就选一个 ...

  5. java迷宫算法_Java 算法 走出迷宫!

    前几天参加字节跳动招聘的笔试,遇到了一个走迷宫的题目(笔试题目,就不挂原图了),当时没有做出来,今天周末,上午总结了一下,来说一说这个迷宫到底怎么走 这篇文章将会分为三个部分,分别是:深度优先算法:获 ...

  6. java实现一个随机迷宫_【小白学游戏常用算法】一、随机迷宫算法

    现在的很多游戏中的地图一般采用格子的方式,虽然在表面地图上无法看到实际的格子,但是在地图的结构中专门有一个逻辑层,这个层和地图大小相等,划出很多小的格子,然后在可以通过的地方使用0表示,在有障碍的且不 ...

  7. Java 代码分享(第4篇),绘制迷宫2 绘制起点终点和路径

    开发环境: 操作系统Win10. 1.下载Java 15,提取码:soft 2.下载软件 Eclipse 2020-12,提取码:soft 3.生成迷宫第1版 下载本博客的实例工程代码,提取码:sof ...

  8. java语言基础总结ppt_我的java基础知识总结ppt

    昨天加上今天,我把java基础知识总结的ppt做好了,其中包括: 1基础阶段所有项目展示 2.阶段自我总结,自己的提升和不足 3.后期学习规划 我在ppt里面把几个有代表性项目展示了出来,并且描述了我 ...

  9. 【java毕业设计】基于java+swing+GUI的连连看游戏设计与实现(毕业论文+程序源码)——连连看游戏

    基于java+swing+GUI的连连看游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+swing+GUI的连连看游戏设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦 ...

最新文章

  1. len(x) 击败 x.len(),从内置函数看 Python 的设计思想
  2. HTML5从入门到精通(明日科技) 中文pdf扫描版
  3. springboot banner在线生成_SpringBoot系列教程10--小花样之SpringBoot配置自定义Banner
  4. 读入自然数m、n,判断m/n是有限小数还是循环小数
  5. rocketmq 初探(二)
  6. 正则表达式 Mather类的使用
  7. 作者:吴甘沙,男,现任英特尔中国研究院院长。
  8. 这个顶级AI赛事总奖池100W+!CV 、NLP赛题等你来战!
  9. Spring学习总结3——配置datasource三种方式
  10. .Net Micro Framework研究—串口操作
  11. php常用加密函数总结
  12. 双向链表与LinkedHashMap
  13. 材料成形计算机辅助设计,材料成形及控制工程
  14. VM虚拟机完美运行macos
  15. idea实现Tomcat热部署
  16. 微信公众号通过a标签打开小程序
  17. 畅游或将私有化退市股价涨近50%,搜狐“吃饱”后能重回巅峰吗?
  18. The Wheel Strategy
  19. for循环的语句执行顺序
  20. 【桌面美化】这下可以肆无忌惮的看小姐姐了

热门文章

  1. python定义字典列表_[Python基础]五、列表、元组和字典
  2. 零基础学习pythonrequests_requests库初体验
  3. android 判断按钮是否已经有onclicklinstener,通过点击事件监听setOnClickListener彻底理解回调...
  4. css匹配title,解决css中的匹配问题
  5. bicq php,BICQ v2.0.0
  6. android 分段显示百分比,按百分比设置排名-Android DisplayMetrics
  7. mysql 子查询添加索引_mysql – 你能索引子查询吗?
  8. mysql监测攻击_如何检测SQL注入技术以及跨站脚本攻击
  9. oracle常见单词_Oracle的词汇表
  10. 安装程序无法创建新的系统分区也无法定位现有系统分区_如何拥有一个 Windows 10 和 Debian 10 的双系统...