1. package com.h.递归.迷宫回溯;
    2. import java.io.IOException;
    3. public class Maze {
    4. /*
    5. 0: 没有走过
    6. 1: 为墙
    7. 2: 表示路可以走
    8. 3: 表示改点已经走过并且走不通
    9. */
    10. //设置迷宫边框
    11. private static void createMaze(int[][] maze){
    12. //将上下边框设置为 1
    13. for (int i = 0; i < 8; i++) {
    14. maze[0][i] = 1 ;
    15. maze[7][i] = 1 ;
    16. }
    17. //将左右边框设置为 1
    18. for (int i = 0; i < 8; i++) {
    19. maze[i][0] = 1;
    20. maze[i][7] = 1;
    21. }
    22. maze[3][1] = 1;
    23. maze[3][2] = 1;
    24. }
    25. //打印迷宫
    26. private static void soutMaze(int[][] maze){
    27. for (int[] ints : maze) {
    28. for (int anInt : ints) {
    29. System.out.print(anInt+" ");
    30. }
    31. System.out.println("");
    32. }
    33. }
    34. //设置起点 , 终点
    35. private static void setStartEnd(int[] start , int[] end,int[][] maze){
    36. maze[start[0]][start[1]] = 2;
    37. maze[end[0]][end[1]] = 3;
    38. }
    39. //使用最快的路径从起点到终点
    40. private static boolean run(int[][] maze,int startX , int startY , int[] end){
    41. //如果终点等于2
    42. if(maze[end[0]][end[1]] == 2){
    43. return true;
    44. }else{
    45. //如果当前这个没有走过
    46. if (maze[startX][startY] == 0){
    47. maze[startX][startY] = 2;
    48. if (run(maze,startX+1,startY,end)) {//先下走
    49. return true;
    50. }else if(run(maze,startX,startY+1,end)){//向右走
    51. return true;
    52. }else if(run(maze,startX-1,startY,end)){//向上走
    53. return true;
    54. }else if(run(maze,startX,startY-1,end)){//向左边走
    55. return true;
    56. }else{
    57. maze[startX][startY] = 3;
    58. return false;
    59. }
    60. }else{
    61. return false;
    62. }
    63. }
    64. }
    65. public static void main(String[] args) throws IOException {
    66. //迷宫大小
    67. int[][] maze = new int[8][8];
    68. //创建迷宫的墙
    69. createMaze(maze);
    70. //设置起点与终点
    71. int[] start = {1,1};
    72. int[] end = {6,6};
    73. //开始
    74. run(maze,start[0],start[1],end);
    75. //打印迷宫
    76. soutMaze(maze);
    77. }
    78. }