java简单的迷宫问题——堆栈的应用
来源:互联网 发布:劳丽诗雕宝 淘宝店 编辑:程序博客网 时间:2024/06/05 05:35
这里说一下简单的迷宫问题,老鼠如何在迷宫中起点走到终点,一个二位数组MAZE[][]表示迷宫,MAZE[i][j]=1表示此处有墙,MAZE[i][j]=0表示无墙(可以通过),老鼠走过的路线就将其对应值设置为2,这里提供了一个起点(1,1)和终点(8,10),数组内容如下:
上代码!(这里其实没什么智能性,就像是无头苍蝇一样一直撞到出口)
记录老鼠走过的路径
public class TraceRecord { public Node first; public Node last; public boolean isEmpty() { return first==null; } public void insert(int x, int y) { Node node = new Node(x, y); if(isEmpty()) { first = node; last = node; } else { last.next = node; last = node; } } public void delete() { Node node; if(isEmpty()) { System.out.println("【队列已经空了】"); return; } node = first; while (node.next != last) { node = node.next; } node.next = last.next; last = node; } class Node { int x; int y; Node next; public Node(int x, int y) { this.x = x; this.y = y; this.next = null; } }}
老鼠走迷宫
public class Maze { //出口坐标 public static int ExitX = 8; public static int ExitY = 10; //迷宫 public static int[][] MAZE = { {1,1,1,1,1,1,1,1,1,1,1,1}, {1,0,0,0,1,1,1,1,1,1,1,1}, {1,1,1,0,1,1,0,0,0,0,1,1}, {1,1,1,0,1,1,0,1,1,0,1,1}, {1,1,1,0,0,0,0,1,1,0,1,1}, {1,1,1,0,1,1,0,1,1,0,1,1}, {1,1,1,0,1,1,0,1,1,0,1,1}, {1,1,1,1,1,1,0,1,1,0,1,1}, {1,1,0,0,0,0,0,0,1,0,0,1}, {1,1,1,1,1,1,1,1,1,1,1,1} }; public static void main(String[] args) { int i,j,x,y; TraceRecord path = new TraceRecord(); //入口坐标 (开始坐标) x=1; y=1; System.out.println("【迷宫的路径(0的部分)】"); for (i=0;i<10;i++) { for (j=0;j<12;j++) { System.out.print(MAZE[i][j]); } System.out.println(); } while(x<=ExitX && y<=ExitY) { MAZE[x][y] = 2; if(MAZE[x-1][y] == 0) { x -= 1; path.insert(x, y); } else if (MAZE[x+1][y] == 0) { x += 1; path.insert(x, y); } else if(MAZE[x][y-1] == 0) { y -= 1; path.insert(x, y); } else if(MAZE[x][y+1] == 0) { y += 1; path.insert(x, y); } else if (checkExit(x, y, ExitX, ExitY) == 1) { break; } else { MAZE[x][y] = 2; path.delete(); x = path.last.x; y = path.last.y; } } System.out.println("【老鼠走过的路径(2的部分)】"); for(i=0;i<10;i++){ for(j=0;j<12;j++) { System.out.print(MAZE[i][j]); } System.out.println(); } } public static int checkExit(int x, int y, int ex, int ey) { if(x==ex && y==ey) { if(MAZE[x-1][y]==1 || MAZE[x+1][y]==1 || MAZE[x][y-1]==1 || MAZE[x][y+1]==2) return 1; if(MAZE[x-1][y]==1 || MAZE[x+1][y]==1 || MAZE[x][y-1]==2 || MAZE[x][y+1]==1) { return 1; } if(MAZE[x-1][y]==1 || MAZE[x+1][y]==2 || MAZE[x][y-1]==1 || MAZE[x][y+1]==1) { return 1; } if(MAZE[x-1][y]==2 || MAZE[x+1][y]==1 || MAZE[x][y-1]==1 || MAZE[x][y+1]==1) { return 1; } } return 0; }}
运行结果,是可以看到走出的路线的(值为2的)
0 0
- java简单的迷宫问题——堆栈的应用
- 迷宫求解问题——堆栈的使用
- 迷宫问题——堆栈应用(C++版)
- 栈的应用——迷宫问题
- 迷宫问题——栈的应用
- 栈的应用——迷宫问题
- 堆栈的应用--迷宫求解程序
- 利用堆栈实现迷宫问题的求解
- 迷宫求解——栈的简单应用
- C语言对搜索的简单应用(迷宫问题
- 栈的应用———迷宫问题
- 栈的应用——迷宫求解问题
- 栈的应用——求解迷宫问题
- 队列的应用——求解迷宫问题
- 迷宫问题(栈的应用)
- 栈的应用--迷宫问题
- java 的堆栈问题
- 迷宫问题(堆栈及其应用)
- POJ Kaka's Matrix Travels 3422 (最小费用最大流)
- 跨域问题
- 数论-反复平方法快速求幂取模运算
- 开源库
- Unity Camera的两种模式
- java简单的迷宫问题——堆栈的应用
- linux中fork()函数详解(原创!!实例讲解) 讲得很好啊!!!
- NOIP2016第四题前五测试数据------魔法阵
- LibEvent中文帮助文档--第13章【连接监听器:接受一个TCP连接】
- javascript之数组
- 排序的讲解
- GIT/GITHUB
- u-boot-2016.11 uboot启动简易分析(基于S5PV210)
- VB 生成exe后,动态加载窗体的show事件会出现运行时错误5的解决方法