package com.h.递归.迷宫回溯;import java.io.IOException;public class Maze { /* 0: 没有走过 1: 为墙 2: 表示路可以走 3: 表示改点已经走过并且走不通 */ //设置迷宫边框 private static void createMaze(int[][] maze){ //将上下边框设置为 1 for (int i = 0; i < 8; i++) { maze[0][i] = 1 ; maze[7][i] = 1 ; } //将左右边框设置为 1 for (int i = 0; i < 8; i++) { maze[i][0] = 1; maze[i][7] = 1; } maze[3][1] = 1; maze[3][2] = 1; } //打印迷宫 private static void soutMaze(int[][] maze){ for (int[] ints : maze) { for (int anInt : ints) { System.out.print(anInt+" "); } System.out.println(""); } } //设置起点 , 终点 private static void setStartEnd(int[] start , int[] end,int[][] maze){ maze[start[0]][start[1]] = 2; maze[end[0]][end[1]] = 3; } //使用最快的路径从起点到终点 private static boolean run(int[][] maze,int startX , int startY , int[] end){ //如果终点等于2 if(maze[end[0]][end[1]] == 2){ return true; }else{ //如果当前这个没有走过 if (maze[startX][startY] == 0){ maze[startX][startY] = 2; if (run(maze,startX+1,startY,end)) {//先下走 return true; }else if(run(maze,startX,startY+1,end)){//向右走 return true; }else if(run(maze,startX-1,startY,end)){//向上走 return true; }else if(run(maze,startX,startY-1,end)){//向左边走 return true; }else{ maze[startX][startY] = 3; return false; } }else{ return false; } } } public static void main(String[] args) throws IOException { //迷宫大小 int[][] maze = new int[8][8]; //创建迷宫的墙 createMaze(maze); //设置起点与终点 int[] start = {1,1}; int[] end = {6,6}; //开始 run(maze,start[0],start[1],end); //打印迷宫 soutMaze(maze); }}