-
描述: 给出一个迷宫,运用递归,得到走出迷宫的路径信息。
-
代码实现:
import java.util.ArrayList; import java.util.List; /** * 一些约定: * 1. 围墙及路障用 1 表示 * 2. 没有走过的点用 0 表示 * 3. 可以走通的点用 2 表示 * 4. 走过但走不通的点用 3 表示 * 5. 走的策略为:下右上左 */ public class Maze { public static void main(String[] args) { // 初始化迷宫的大小 int rows = 8; int cols = 8; // 设置路障信息 ArrayList<int[]> roadblocks = new ArrayList<>(); roadblocks.add(new int[]{3,1}); roadblocks.add(new int[]{3,2}); roadblocks.add(new int[]{5,3}); int[][] maze = initMaze(rows, cols, roadblocks); // 打印初始化好的迷宫 System.out.println("迷宫为:"); for (int i = 0; i < maze.length; i++) { for (int j = 0; j < maze[0].length; j++) { System.out.print(maze[i][j] + " "); } System.out.println(); } // 设置行走路径 setPath(maze, 1,1,6,6); // 输出走过后的迷宫 System.out.println("路径为:"); for (int i = 0; i < maze.length; i++) { for (int j = 0; j < maze[0].length; j++) { System.out.print(maze[i][j] + " "); } System.out.println(); } } /** * 初始化一个迷宫 * @param rows 行数 * @param cols 列数 * @param roadblocks 路障坐标 * @return 初始化的迷宫地图 */ public static int[][] initMaze(int rows, int cols, List<int[]> roadblocks) { int[][] maze = new int[rows][cols]; // 设置迷宫围墙 for (int i = 0; i < maze.length; i++) { maze[i][0] = 1; maze[i][cols - 1] = 1; } for (int j = 0; j < maze.length; j++) { maze[0][j] = 1; maze[rows - 1][j] = 1; } // 设置路障 for (int[] roadblock : roadblocks) { maze[roadblock[0]][roadblock[1]] = 1; } // 返回迷宫地图 return maze; } /** * 设置行走路径 * @param maze 迷宫 * @param srcRow,srcCol 出发点 * @param destRow,destCol 目的点 */ public static boolean setPath(int[][] maze, int srcRow, int srcCol, int destRow, int destCol) { // 如果目的点为 2 ,表示路径已经找到 if (maze[destRow][destCol] == 2) { return true; } else { if (maze[srcRow][srcCol] == 0) { // 如果当前点还没有走过 maze[srcRow][srcCol] = 2; // 假定该点可以走通 if (setPath(maze,srcRow+1, srcCol, destRow, destCol)) { // 向下走 return true; } else if (setPath(maze,srcRow, srcCol+1, destRow, destCol)) { // 向右走 return true; } else if (setPath(maze,srcRow-1, srcCol, destRow, destCol)) { // 向上走 return true; } else if (setPath(maze,srcRow, srcCol-1, destRow, destCol)) { // 向左走 return true; } else { // 说明该点走不通,置为 3 maze[srcRow][srcCol] = 3; return false; } } else { return false; } } } }
08 递归-迷宫问题
最新推荐文章于 2021-10-14 22:00:33 发布