Java中的DFS(深度優(yōu)先搜索)和BFS(廣度優(yōu)先搜索)算法都可以用于解決迷宮問題。
DFS是一種搜索算法,從初始狀態(tài)開始,沿著一條路徑遍歷迷宮直到找到終點或無法繼續(xù)搜索。當遇到無法繼續(xù)搜索的節(jié)點時,回溯到前一個節(jié)點繼續(xù)搜索。DFS算法往往利用遞歸函數實現。
public static boolean dfs(int[][] maze, int x, int y, boolean[][] visited) { if (x == maze.length - 1 && y == maze[0].length - 1) { return true; // 找到終點 } visited[x][y] = true; int[][] directions = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}}; // 四個方向 for (int[] direction : directions) { int nx = x + direction[0]; int ny = y + direction[1]; if (nx >= 0 && nx< maze.length && ny >= 0 && ny< maze[0].length && maze[nx][ny] == 0 && !visited[nx][ny]) { if (dfs(maze, nx, ny, visited)) { return true; // 找到一條路徑 } } } return false; // 無法繼續(xù)搜索 }
BFS是一種廣度優(yōu)先搜索算法,它從初始狀態(tài)開始,一層一層地遍歷迷宮,直到找到終點。它利用隊列來實現,先將初始狀態(tài)加入隊列,并標記為已訪問,然后從隊列中取出第一個元素,遍歷其周圍的節(jié)點,并加入隊列中,直到隊列為空或找到終點。
public static boolean bfs(int[][] maze, boolean[][] visited) { Queuequeue = new LinkedList<>(); queue.offer(new int[]{0, 0}); // 初始狀態(tài) visited[0][0] = true; int[][] directions = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}}; // 四個方向 while (!queue.isEmpty()) { int[] curr = queue.poll(); int x = curr[0]; int y = curr[1]; if (x == maze.length - 1 && y == maze[0].length - 1) { return true; // 找到終點 } for (int[] direction : directions) { int nx = x + direction[0]; int ny = y + direction[1]; if (nx >= 0 && nx< maze.length && ny >= 0 && ny< maze[0].length && maze[nx][ny] == 0 && !visited[nx][ny]) { queue.offer(new int[]{nx, ny}); // 加入隊列 visited[nx][ny] = true; } } } return false; // 無法繼續(xù)搜索 }