迷宫算法
Java实现迷宫算法
1 package com.java; 2 3 /** 4 * 回溯法解决,迷宫算法 5 * 6 * 算法步骤: 7 * 1、首先将起点加入路径,并设置为已走 8 * 2、判断当前点是否为终点出口,若是则输出路径,打印输出结果,否则进行下一步 9 * 3、依次判断当前点的上、下、左、右四个点是否可走,如果可走则分别递归走 10 * 4、若当前路径不通,则向上回溯,并将之前设置的已走改为未走,以便下一条路径可访问 11 */ 12 public class Maze3 { 13 14 public static int count=0;//找到的路径计数 15 16 public static void main(String[] args) { 17 // 初始化一个迷宫地图 18 int[][] maze = { { 2, 2, 2, 2, 2, 2, 2, 2, 2 }, 19 { 2, 0, 0, 0, 0, 0, 0, 0, 2 }, { 2, 0, 2, 2, 0, 2, 2, 0, 2 }, 20 { 2, 0, 2, 0, 0, 2, 0, 0, 2 }, { 2, 0, 2, 0, 2, 0, 2, 0, 2 }, 21 { 2, 0, 0, 0, 0, 0, 2, 0, 2 }, { 2, 2, 0, 2, 2, 0, 2, 2, 2 }, 22 { 2, 0, 0, 0, 0, 0, 0, 0, 2 }, { 2, 2, 2, 2, 2, 2, 2, 2, 2 } }; 23 FindPath(maze,1,1,7,7); 24 System.out.println("一共找到"+count+"条路径"); 25 } 26 public static void FindPath(int[][] maze,int si,int sj,int ei,int ej){ 27 //将当前的点加入路径,设置为已走 28 maze[si][sj]=1; 29 //当前找到一条路径 30 if(si==ei&&sj==ej){ 31 count++; 32 System.out.println("找到了一条路径(*表示的是一条通路):"); 33 for (int i = 0; i < maze.length; i++) { 34 for (int j = 0; j < maze[i].length; j++) { 35 if(maze[i][j]==2){ 36 System.out.print("2\t"); 37 }else if(maze[i][j]==1){ 38 System.out.print("*\t"); 39 }else{ 40 System.out.print("/\t"); 41 } 42 } 43 System.out.println(); 44 } 45 } 46 //左边 47 if(maze[si][sj-1]==0){ 48 FindPath(maze,si,sj-1,ei,ej); 49 } 50 //右边 51 if(maze[si][sj+1]==0){ 52 FindPath(maze,si,sj+1,ei,ej); 53 } 54 //左边 55 if(maze[si-1][sj]==0){ 56 FindPath(maze,si-1,sj,ei,ej); 57 } 58 //左边 59 if(maze[si+1][sj]==0){ 60 FindPath(maze,si+1,sj,ei,ej); 61 } 62 //当走到死胡同,向上回溯,并把当前节点设为0 63 maze[si][sj]=0; 64 } 65 66 }