1. 题目:
Given a maze and a start point and a target point, return whether the target can be reached.
需要实现的递归函数的接口是:public static boolean solveMaze(char[][] maze, int startX, int startY, int targetX, int targetY, boolean[][] visited);
分析:
依照解决递归问题的思路,第一步是找出 base case:当 startX = targetX && startY = targetY 的时候,已经到达目标,返回true;
第二步是写出 recursion rule:对于当前所处位置 (startX, startY),按照一定的方向(例如,右、上、左、下)依次修改坐标,并传入到递归函数中。
如果碰到了base case,即抵达目标,返回true;
如果超出边界或者不能访问(maze[startX][startY] == 'X')或者已经访问过该位置,返回false;
其中是否访问过该位置,用boolean[][] visited 来标记,只要递归函数访问过该位置,visited[startX][startY] = true;
第三步是确定需要的参数:递归函数的接口已经给出,且满足所需参数。
代码:
public class Maze {
public static boolean solveMaze(char[][] maze, int startX, int startY, int targetX, int targetY, boolean[][] visited) {
if (startX == targetX && startY == targetY)
return true;
if (startX < 0 || startX >= maze.length || startY < 0 || startY >= maze[0].length
|| maze[startX][startY] == 'X' || visited[star