递归解决迷宫问题

要求:按照下右上左的顺序判断路径

package com.practice;

public class Maze {
    public static void main(String[] args){
        int [][] map = new int[7][7];
        for(int i = 0; i < map.length; i++){//设置初始迷宫
            map[0][i] = 1;
            map[6][i] = 1;
            map[i][0] = 1;
            map[i][6] = 1;
        }
        map[3][1] = 1;
        map[5][2] = 1;
        System.out.println("原始迷宫如下:");
        for(int i = 0; i < map.length; i++){
            for(int j = 0; j < map[i].length; j++){
                System.out.print(map[i][j] + " ");
            }
            System.out.println();
        }

        F f = new F();
        f.Fideway(map,1,1);//传入[1,1]
        System.out.println("迷宫路线如下:");
        for(int i = 0; i < map.length; i++){
            for(int j = 0; j < map[i].length; j++){
                System.out.print(map[i][j] + " ");
            }
            System.out.println();
        }
    }
}
/*
1、规定迷宫路障 0--未走过,1--障碍,2--走过的 可通行,3--不可通行
2、规定出口[5,5]、入口[1,1]
3、按照下右上左的顺序
4、找到返回true 未找到返回false
*/

class F{
    public boolean Fideway(int [][] map, int i, int j){
        if(map[5][5] == 2){//出口已找到,直接返回true
            return true;
        }else{//出口没找到,判断行走路径
            if(map[i][j] == 0){
                map[i][j] = 2;//暂时假定此位置可通行 标记为2
                if(Fideway(map, i + 1, j)){//i表示行,j表示列,i+1表示方向下
                    return true;
                }else if(Fideway(map, i, j +1)){//右
                    return true;
                }else if(Fideway(map, i -1, j)){//上
                    return true;
                }else if(Fideway(map, i, j - 1)){//左
                    return true;
                }else{//假定失败,此位置的4个方向均不可通,则标记此位置为3,并
                    map[i][j] = 3;
                    return false;
                }

            }else{
                return false;
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值