递归回溯解决迷宫问题

简介: 递归回溯解决迷宫问题

1.此次演示路径为下、右、上、左;

2.仅为了学习递归回溯算法。

public static void main(String[] args) {
        int[][] map = new int[8][7];//迷宫地图
        //设置围墙,1为围墙
        for(int i=0,j=0;i < 8 && j < 7;i++,j++) {
            map[0][j] = 1;
            map[7][j] = 1;
            map[i][0] = 1;
            map[i][6] = 1;
        }
        map[3][1] = 1;
        map[3][2] = 1;
        for(int[] i:map) {
            for(int j:i) {
                System.out.print(j);
            }
            System.out.println();
        }
        System.out.println("-------------");
        //递归回溯
        f(map,1,1);
        for(int[] i:map) {
            for(int j:i) {
                System.out.print(j);
            }
            System.out.println();
        }
        
    }
    
    /*
     * map表示地图; 
     * i,j表示从哪个位置开始找; 
      *   如果找到则返回true,否则返回false。
     */
    //如果map[i][j]为2,则为通路;为1表示围墙;为3表示死路;0表示还未走过
    public static boolean f(int[][] map, int i, int j) {
        if(map[6][5] == 2) {//通路已找到
            return true;
        }else {
            if(map[i][j] == 0) {//如果当前这个点还未走过
                map[i][j] = 2;//假定此点能走通
                if(f(map,i+1,j)) {//向下走
                    return true;
                }else if(f(map, i, j+1)) {//向右走
                    return true;
                }else if(f(map, i-1, j)) {//向上走
                    return true;
                }else if(f(map, i, j-1)) {//向左走
                    return true;
                }else {        //此点走不通,置为3,直接返回false;
                    map[i][j] = 3;
                    return false;
                }
            }else {//如果不为0,则可能为1,2,3;
                return false;
            }
        }
        
    }
目录
相关文章
2705:扩号匹配问题(递归与非递归)
题目链接:http://noi.openjudge.cn/ch0202/2705/ 总时间限制:1000ms内存限制:65536kB 描述 在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。
2122 0
|
4月前
|
算法
【算法】递归、搜索与回溯——汉诺塔
【算法】递归、搜索与回溯——汉诺塔
|
7月前
|
Java Python
汉诺塔递归问题,递归思路详解
汉诺塔递归问题,递归思路详解
119 0
|
7月前
|
算法 测试技术 C#
【回溯 深度优先搜索】980. 不同路径 III
【回溯 深度优先搜索】980. 不同路径 III
|
算法
第 10 天_递归 / 回溯【算法入门】
第 10 天_递归 / 回溯【算法入门】
103 0
|
算法
第 11 天_递归 / 回溯【算法入门】
第 11 天_递归 / 回溯【算法入门】
121 0
回溯——46. 全排列
本专栏按照数组—链表—哈希—字符串—栈与队列—二叉树—回溯—贪心—动态规划—单调栈的顺序刷题,采用代码随想录所给的刷题顺序,一个正确的刷题顺序对算法学习是非常重要的,希望对大家有帮助
回溯——46. 全排列
|
算法 JavaScript Java
数据结构与算法-暴力递归与回溯
数据结构与算法-暴力递归与回溯
192 0
数据结构与算法-暴力递归与回溯
|
机器学习/深度学习 缓存 机器人
从暴力递归到动态规划,记忆化搜索
从暴力递归到动态规划,记忆化搜索
从暴力递归到动态规划,记忆化搜索
|
算法
递归+回溯求解数独问题
导读:回溯是常用的算法理论之一,很多规模较大、直接分析较为复杂的问题都可以考虑用回溯求解,例如N皇后问题、骑士周游和走迷宫问题等。本质上,回溯问题是一种优化后的暴力求解,通过及时的剪枝和启发式的寻找最优路径,可以有效加速求解过程。回溯还常常与递归搭配使用
168 0
递归+回溯求解数独问题