博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
迷宫出逃
阅读量:6816 次
发布时间:2019-06-26

本文共 2540 字,大约阅读时间需要 8 分钟。

hot3.png

一、设计迷宫的的二维数组

* 外围1表示的墙壁,0表示路标      * 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     */
外围1表示墙壁,0表示路径

二、问题分析

1.寻路方向选择

  在迷宫的入口点开始,围绕这个点有8个方向可以选择。

2.路标的记录

  在每个可以走的地方也就是路径进行入栈处理。

3.路标入栈了可能出现的问题

  3.1此路不通怎么办也就是前面可能是同过的

      如果是标记了那么这个路是走过的,就不用再走了,出栈就可以了

  此路是同的那么结果就是路径了

三、总的来说

1循环+堆栈

  首先入口入栈

  栈有值了,四面八方寻找

  栈找到了,不是终点,那么放进去继续寻找,如果是死胡同,那么修改过出栈就可以了

  那么栈就是结果

2.递归

  递归终结时边界可以出逃

  不是四面八方寻找,如果死胡同了,继续寻找,如果找到了那么不用四面八方了终结掉寻找

四、代码

import java.util.Stack;/** *  迷宫出逃程序 *  WZ 2014-11-08 */public class Maze {	/*	 * 1.首先需要个迷宫 8*10 有效路径(1,1)(6,8)	 * 外围1表示的墙壁,0表示路标	 * 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 mazeArray[][]={			{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}}; boolean flage=false; public int path(int mazeArray[][],int directArray[][],Stack s){ Position p=new Position(1,1,-1); s.push(p); while(!s.isEmpty()){ p=(Position) s.pop(); int x=p.x; int y=p.y; int d=p.d+1; while(d<8){ int i=x+directArray[d][0]; int j=y+directArray[d][1]; if(mazeArray[i][j]==0){ p=new Position(i,j,d); s.push(p); x=i; y=j; mazeArray[x][y]=-1; if(x==6&&y==8) return 1; else d=0; }else d++; } } return 0; } public static void main(String[] args) { Maze m=new Maze();// Stack s=new Stack();// int a=m.path(m.mazeArray, m.move, s);// while(!s.isEmpty()){// Position p=(Position) s.pop();// System.out.println(p.x+" "+p.y);// } m.recursive(1, 1); } /** * 递归实现迷宫出逃 */ public void recursive(int x,int y){ int now=mazeArray[x][y]; if(now==0&&(x==6||y==8)){ mazeArray[x][y]=-1; flage=true; System.out.println("出逃步骤:"+x+" "+y); }else if(now==0){ //修改这里的值 mazeArray[x][y]=-1; for(int i=0;i<8;i++){ recursive(x+move[i][0],y+move[i][1]); if(flage){ System.out.println("出逃步骤:"+x+" "+y); break; } } }else{ return; } } } class Position{ public Position(int x,int y, int d){ this.x=x; this.y=y; this.d=d; } int x; int y; int d;}

转载于:https://my.oschina.net/findurl/blog/343774

你可能感兴趣的文章
帝国cms缩略图:网站不同地方生成不同的缩略图
查看>>
python Django Ajax基础
查看>>
aop point-cut表达式
查看>>
第四周 day17 类名称空间,查询顺序等/组合
查看>>
easyui的 getSelections 与 getSelected 对比区别
查看>>
后缀数组模板 UOJ#35. 后缀排序
查看>>
[转]DirectX Rendering Pipeline渲染管线图
查看>>
ImageMaigck不支持中文路径的问题
查看>>
俄罗斯方块
查看>>
ZOJ 2061 - Buy the Ticket
查看>>
博客园定制页面(五)——使用自定义JS脚本(公告栏显示时间)
查看>>
清华申请退学博士作品:完全用Linux工作
查看>>
总结:串和数组的学习
查看>>
Canvas + JavaScript 制作图片粒子效果
查看>>
去你妈的瑞星
查看>>
开发人员学Linux(5):CentOS7编译安装Nginx并搭建Tomcat负载均衡环境
查看>>
需求之辩
查看>>
Virtual Machine Manager 2012 R2创建SQL 配置文件
查看>>
容灾备份的7个等级
查看>>
疯狂ios讲义疯狂连载之实现游戏视图控制器
查看>>