求走迷宫问题的算法,要求用Java写的?

迷宫是由许多小方格构成的矩形,在每个小方格中有的是墙(“1”),有的是路(“0”),以下是一个迷宫示例;走迷宫就是从某一个小方格在不能穿墙时,沿上、下、左、右四个方向走到邻近的方格。设迷宫的入口是在左上角,出口是右下角,根据给定的迷宫,找出任意一条从入口到出口的路径;

第1个回答  2013-10-21
public class Maze { private int[][] maze = null;
private int[] xx = { 1, 0, -1, 0 };
private int[] yy = { 0, 1, 0, -1 };
private Queue queue = null; public Maze(int[][] maze) {
this.maze = maze;
queue = new Queue(maze.length * maze.length);
} public void go() {
Point outPt = new Point(maze.length - 1, maze[0].length - 1);
Point curPt = new Point(0, 0);
Node curNode = new Node(curPt, null);
maze[curPt.x][curPt.y] = 2;
queue.entryQ(curNode); while (!queue.isEmpty()) {
curNode = queue.outQ();
for (int i = 0; i < xx.length; ++i) {
Point nextPt = new Point();
nextPt.x = (curNode.point).x + xx[i];
nextPt.y = (curNode.point).y + yy[i];
if (check(nextPt)) {
Node nextNode = new Node(nextPt, curNode);
queue.entryQ(nextNode);
maze[nextPt.x][nextPt.y] = 2;
if (nextPt.equals(outPt)) {
java.util.Stack<Node> stack = new java.util.Stack<Node>();
stack.push(nextNode);
while ((curNode = nextNode.previous) != null) {
nextNode = curNode;
stack.push(curNode);
}
System.out.println("A Path is:");
while (!stack.isEmpty()) {
curNode = stack.pop();
System.out.println(curNode.point);
}
return;
}
}
}
}
System.out.println("Non solution!");
} private boolean check(Point p) {
if (p.x < 0 || p.x >= maze.length || p.y < 0 || p.y >= maze[0].length) {
return false;
}
if (maze[p.x][p.y] != 0) {
return false;
}
return true;
} public static void main(String[] args) {
int[][] maze = {
{ 0, 0, 1, 0, 1, 0, 1, 0, 1, 0 },
{ 0, 0, 1, 1, 1, 0, 0, 0, 1, 0 },
{ 0, 1, 0, 0, 1, 0, 0, 0, 0, 1 },
{ 0, 0, 0, 0, 1, 0, 0, 0, 1, 1 },
{ 0, 0, 1, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 1, 0, 1, 0, 0, 1, 0, 0 },
{ 0, 1, 0, 0, 1, 0, 0, 1, 0, 1 },
{ 1, 0, 1, 0, 1, 1, 0, 1, 0, 0 }
};
new Maze(maze).go();
} private class Queue { Node[] array = null;
int size = 0;
int len = 0;
int head = 0;
int tail = 0; public Queue(int n) {
array = new Node[n + 1];
size = n + 1;
} public boolean entryQ(Node node) {
if (isFull()) {
return false;
}
tail = (tail + 1) % size;
array[tail] = node;
len++;
return true;
} public Node outQ() {
if (isEmpty()) {
return null;
}
head = (head + 1) % size;
len--;
return array[head];
} public boolean isEmpty() {
return (len == 0 || head == tail) ? true : false;
} public boolean isFull() {
return ((tail + 1) % size == head) ? true : false;
}
} private class Node { Point point = null;
Node previous = null; public Node() {
this(null,null);
} public Node(Point point, Node node) {
this.point = point;
this.previous = node;
}
} private class Point { int x = 0;
int y = 0; public Point() {
this(0, 0);
} public Point(int x, int y) {
this.x = x;
this.y = y;
} public boolean equals(Point p) {
return (x == p.x) && (y == p.y);
} @Override
public String toString() {
return "(" + x + "," + y + ")";
}
}
}本回答被网友采纳

能帮忙写个JAVA的“迷宫游戏”的程序吗?
import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.IOException;public class GameStart { public static void main(String[] args) { int num=0;\/\/判断方向 System.out.println("迷宫游戏开始:");int[][] array = new MiGong().getMiGong();\/\/创建迷宫 System.ou...

怎样编一个迷宫问题的程序?
import java.util.*; public class maze { \/\/定义一个二维数组,来显示地图数据,1为不通,0为通 public static int Maze[][]={{1,1,1,1,1,1,1}, {1,0,1,0,0,0,1}, {1,1,0,1,1,0,1}, {1,1,0,1,1,0,1}, {1,1,1,0,1,1,1}, {1,0,0,1,0,1,1}, {1,1...

怎样编一个迷宫问题的程序?
import java.util.*; public class maze { \/\/定义一个二维数组,来显示地图数据,1为不通,0为通 public static int Maze[][]={{1,1,1,1,1,1,1}, {1,0,1,0,0,0,1}, {1,1,0,1,1,0,1}, {1,1,0,1,1,0,1}, {1,1,1,0,1,1,1}, {1,0,0,1,0,1,1}, {1,1...

求助java一个二维数组代表迷宫。0代表道路 2表示墙壁。 假设老鼠会从数...
用堆栈的基本思路就是。设置一个起点A。将 A 入栈 。从A开始找到第一个可以达到的点B。将 B 入栈 。如果B无路可走。则在A点处重新换一个可达到的点。否则继续 2-3 。直到达到终点。或者五路可走。详细的解释,这儿有一篇博文:http:\/\/www.cnblogs.com\/haoliuhust\/p\/4270421.html ...

迷宫算法里输入了迷宫具体的路径信息之后怎么用键盘输出结果?
迷宫算法的输出结果通常是迷宫的路径,可以通过在控制台或命令行界面上输出来展示。如果你想通过键盘输入来控制迷宫算法的执行过程,可以考虑使用以下方法:在程序中添加键盘输入功能,例如使用Java中的Scanner类或Python中的input函数等,让用户输入迷宫的起点和终点等信息。在程序中添加控制台输出功能,例如...

java栈实现走迷宫
首先,你要知道走迷宫的思路:就是遇到岔路都往一个方向,比如往右,遇到死路就回头,回头遇到岔路继续往右。

java最新迷宫问题,英文原版求解答
import java.util.*;import java.util.regex.*;class MyPoint{public boolean visited=false;public int parentRow=-1;public int parentColumn=-1;public int x;public int y;public MyPoint(){}public MyPoint(int x,int y){this.x=x;this.y=y;}}class Maze{String[][] maze;final int...

详解Java递归(Recursion)通过递归解决迷宫回溯及八皇后问题
说明:理论上应该创建一个二维数组表示棋盘,但是实际上可以通过算法用一个一维数组即可解决问题。arr[8] = {0,4,7,5,2,6,1,3} \/\/对应arr下标,表示第几行,即第几个皇后,arr[i] = val,val表示第i+1个皇后,放在第i+1行的第val+1列。代码实现 public static int factorial(int n){...

关于Java走迷宫的问题。我已经有相关代码了,但是我看不懂。麻烦高手帮忙...
关于Java走迷宫的问题。我已经有相关代码了,但是我看不懂。麻烦高手帮忙注释一下,然后再修改点儿。 代码分两部分,运行出的迷宫分白色和棕色两部分,白色是路,棕色是墙。要求在此基础上加上可以随时自定义迷宫。就是可以点击白色部分的路可以变成棕色部分的墙。。。有点麻烦。。。谢... 代码分两部分,运行出的...

我正在用java写一个迷宫游戏,现在已经能生成迷宫和移动小人了,请大家...
道具:普通斧头:伐木用,采集木材.道具: 木材, 可以维修桥梁.道具: 开山斧, 可以敲碎堵路的巨石.道具: 球鞋, 可以增加玩家的移动速度.道具: 探照灯: 可以驱散一定范围内的迷雾.可以看清该区域的走势.道具: 记号, 可以在地图上做标记,来识别这个位置是否来过.道具: 钥匙, 可以打开宝箱.---分割线--...

相似回答