java解决迷宫问题-------参考视频 韩顺平《java数据结构和算法》

如图所示,用代码实现从(1,1)白色方格移动到(6,5)白色方格(代码的运行结果需要有具体的路线),红色方格代表围墙
在这里插入图片描述
完整代码如下:

package com.wqc.recursion;

/**
 * @author 高瞻远瞩
 * @version 1.0
 * @motto 算法并不可怕, 可怕的是你不敢面对它, 加油!别浮躁~冲击大厂!!!
 * 用递归解决迷宫问题  规则是在一个8*7大小的迷宫当中  从2行2列成功走到7行6列 即为胜利 最后需要知道走的是哪条路线
 * 四周的每一行是围墙
 */
public class MiGong {
    static int i;
    public static void main(String[] args) {
        //先初始化一个8*7的二维数组
        int[][] map = new int[8][7];//初始里面的元素全为0
        //设置围墙 值为1
        for (int i = 0; i < 7; i++) {//第一行和第8行
            map[0][i] = 1;
            map[7][i] = 1;
//            map[2][i] = 1;
        }
        for (int i = 1; i < 7; i++) {//第一列和第7列
            map[i][0] = 1;
            map[i][6] = 1;
        }
        map[3][1] = 1;
        map[3][2] = 1;
        //在这里将调用一个方法 进行递归走出迷宫
        escapeMap(map,1,1);//递归如果传入的是一个引用类型 则每一个递归开的栈空间共享这一个引用类型
        System.out.println("走的步数=" + i);
        for (int[] ints : map) {
            for (int i : ints) {
                System.out.print(i + "\t");
            }
            System.out.println();
        }
    }

    /**
     * @param map 传入的地图
     * @param row 目前小老鼠所在迷宫的行
     * @param col 列
     * @return 如果找到通路就返回true 没有就返回false
     * 规定2代表小老鼠走过的路径   每走一步就把当前格子置为2  0代表可以往前走  1代表不能走 把走了但没走通设为3
     */
    public static boolean escapeMap(int[][] map, int row, int col) {
        //先考虑递归结束的条件
        if (map[6][5] == 2) {//结束条件
            return true;
        } else {
            if (map[row][col] == 0) {//如果等于0 说明可以走 其他条件均为不能走的情况
                map[row][col] = 2;//把当前的格子置为已走过  然后分别向右 下 上 左 进行递归一步
                i++;
                if (escapeMap(map, row, col + 1)) {
                    return true;
                } else if (escapeMap(map, row + 1, col)) {
                    return true;
                } else if (escapeMap(map, row - 1, col)) {
                    return true;
                } else if (escapeMap(map, row, col - 1)) {
                    return true;
                } else { //加入上面的逻辑都试过了 都返回的false 说明此路不通 把路径都设为3
                    map[row][col] = 3;
                    return false;//这种情况是走了 但是没有走通
                }
            }
            //如果以上逻辑的判断条件为假 才会走以下这个逻辑 情况如下
            // 3的话走了但没走通 1的话代表都是墙 没有可以走的路  2的话 路是已经走过了
            return false;
        }
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值