说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表
示老鼠的行走路径,试以程式求出由入口至出口的路径。
解法老鼠的走法有上、左、下、右四个方向,在每前进一格之后就选一个方向前进,无法前进时退回选择下一个可前进方向,如此在阵列中依序测试四个方向,直到走到出口为止,这是递回的基本题,请直接看程式应就可以理解。入口:左上角 出口:右下角
package lanqiao;
public class Main {
static int startI, startJ;
static int endI;
static int endJ;
static boolean success = false;
public void setStart(int i, int j) {
this.startI = i;
this.startJ = j;
}
public void setEnd(int i, int j) {
this.endI = i;
this.endJ = j;
}
public static void main(String args[]) {
int[][] mize = { { 2, 2, 2, 2, 2, 2, 2 }, { 2, 0, 0, 0, 0, 0, 2 }, { 2, 0, 2, 0, 0, 0, 2 },
{ 2, 0, 0, 2, 0, 2, 2 }, { 2, 2, 0, 2, 0, 2, 2 }, { 2, 0, 0, 0, 0, 0, 2 }, { 2, 2, 2, 2, 2, 2, 2 } };
for (int i = 0; i < mize.length; i++) {
for (int j = 0; j < mize[i].length; j++) {
if (mize[i][j] == 2) {
System.out.print("█");
} else {
System.out.print(" ");
}
}
System.out.println();
}
Main main = new Main();
main.setStart(1, 1);
main.setEnd(5, 5);
go(mize);
}
public static void go(int[][] maze) {
visit(maze, startI, startJ);
}
public static void visit(int[][] maze, int i, int j) {
maze[i][j] = 1;
if (i == endI && j == endJ) {
System.out.println("找到出口");
for (int ii = 0; ii < maze.length; ii++) {
for (int jj = 0; jj < maze[i].length; jj++) {
if (maze[ii][jj] == 2) {
System.out.print("█");
} else if (maze[ii][jj] == 1) {
System.out.print("♣");
} else if (maze[ii][jj] == 3) {
System.out.print("▲");
} else {
System.out.print(" ");
}
}
System.out.println();
}
}
if (!success && maze[i][j + 1] == 0) {
visit(maze, i, j + 1);
}
if (!success && maze[i + 1][j] == 0) {
visit(maze, i + 1, j);
}
if (!success && maze[i][j - 1] == 0) {
visit(maze, i, j - 1);
}
if (!success && maze[i - 1][j] == 0) {
visit(maze, i - 1, j);
}
if (!success) {
maze[i][j] = 0;
}
}
}