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);
}
}