数据结构经典算法学习之老鼠走迷宫01

来源:互联网 发布:mks627软件 编辑:程序博客网 时间:2024/06/05 09:17

老鼠走迷宫


故事背景:老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用0来表示老鼠的行走路径,试以程式求出由入口至出口的路径。


问题思考

老鼠的走法有上、左、下、右四个方向,在每前进一格之后就选一个方向前进,无法前进时退回选择下一个可前进方向,如此在阵列中依序测试四个方向,直到走到出口为止


代码实现

package wj.arithmatic;public class Mourse {int maze[][] = { { 2, 2, 2, 2, 2, 2, 2 }, { 2, 0, 0, 0, 0, 0, 2 }, { 2, 0, 2, 0, 2, 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 } };public void mourse() {// 迷宫图初始化for (int i = 0; i < 7; i++) {for (int j = 0; j < 7; j++) {if (maze[i][j] == 2) {System.out.print("+");} else {System.out.print(" ");}}System.out.println();}// 老鼠起点设置,游戏开始find(0, 1);}// 是否越界public boolean isIndexOut(int i, int j) {return i < 0 || j > 6;}// 迷宫路径寻找public void find(int i, int j) {// 找到任意出口,结束if (i == 5 && maze[i][j] == 1) {System.out.println("老鼠找到了迷宫的出路,出来了!");} else {// 左if (!isIndexOut(i, j - 1)) {if (maze[i][j - 1] == 0) {System.out.println("第" + times + "步从坐标(" + i + "),(" + j + ")走到坐标(" + i + "),(" + (j - 1) + ")");times++;//走过的路线填充为1,避免重复maze[i][j + 1] = 1;find(i, j + 1);}} if (!isIndexOut(i, j + 1)) {// 右if (maze[i][j + 1] == 0) {System.out.println("第" + times + "步从坐标(" + i + "),(" + j + ")走到坐标(" + i + "),(" + (j + 1) + ")");times++;//走过的路线填充为1,避免重复maze[i][j+1] = 1;find(i, j + 1);}}if (!isIndexOut(i-1, j)) {//上if (maze[i - 1][j] == 0) {System.out.println("第" + times + "步从坐标(" + i + "),(" + j + ")走到坐标(" + (i - 1) + "),(" + j + ")");times++;//走过的路线填充为1,避免重复maze[i - 1][j] = 1;find(i - 1, j);}}if (!isIndexOut(i+ 1, j)) {//下if (maze[i + 1][j] == 0) {System.out.println("第" + times + "步从坐标(" + i + "),(" + j + ")走到坐标(" + (i + 1) + "),(" + j + ")");times++;//走过的路线填充为1,避免重复maze[i + 1][j] = 1;find(i + 1, j);}}}}public static void main(String args[]) {new Mourse().mourse();}}


0 0
原创粉丝点击