递归——Maze

博客探讨如何使用递归解决迷宫问题,从找出基础情况到递归规则的建立,详细解析递归函数的实现过程,包括边界条件、访问标记及回溯策略。文章还讨论了在不同接口需求下如何调整递归函数参数,如添加路径记录。
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值