美文网首页
递归求解迷宫

递归求解迷宫

作者: YAOPRINCESS | 来源:发表于2020-07-05 19:06 被阅读0次

效果图

image.png

结果图

image.png

完整代码

package com.nan.recursion;

/**
 * @author klr
 * @create 2020-07-05-16:49
 */
public class RecursionTest {

    public static void main(String[] args) {
        test(5);
        System.out.println("阶乘结果:");
        System.out.println(factorial(5));
        System.out.println("迷宫:");
        int[][] map=new int[8][7];
        //设置迷宫的墙
        for(int i=0;i<8;i++){
            map[i][0]=1;
            map[i][6]=1;
        }
        for (int j = 0; j < 7; j++) {
            map[0][j]=1;
            map[7][j]=1;
        }
        map[3][1]=1;
        map[3][2]=1;
        map[4][3]=1;
        map[3][4]=1;
        for (int[] ints : map) {
            for (int anInt : ints) {
                System.out.print(anInt+" ");
            }
            System.out.println();
        }
        System.out.println("迷宫的解:");
        maze(map,1,1);
        for (int[] ints : map) {
            for (int anInt : ints) {
                System.out.print(anInt+" ");
            }
            System.out.println();
        }


    }

    //递归打印n
    public static void test(int n) {
        if (n > 1) {
            test(n - 1);
        }
        System.out.println("n="+n);
    }

    //阶乘n
    public static int factorial(int n){
        if (n == 1) {
            return 1;
        }
        else {
            return factorial(n-1)*n;
        }
    }


    //递归求解迷宫
    //map为地图,迷宫为8行7列
    //i,j为起点
    //0代表未走过,1代表墙,2代表通路可以走,3代表已走过,走不通
    public static boolean maze(int[][] map,int i,int j){
        //提前写死终点,也是出口
        if(map[6][5]==2){
            return true;
        }
        //如果当前结点没走过
        if (map[i][j] == 0) {
            //假设当前结点可以走
            map[i][j]=2;
            //接下来制定规则,下》右》上》左
            if (maze(map, i + 1, j)) {
                return true;
            }
            if (maze(map, i, j + 1)) {
                return true;
            }
            if (maze(map, i - 1, j)) {
                return true;
            }
            if (maze(map, i - 1, j)) {
                return true;
            }
            //如果上下左右都不能走,说明map[i][j]这条路可以放弃了
            else {
                map[i][j] = 3;
                return false;
            }
        }
        else {  //1,3,不可能是2,因为2会一直走,不然就会变成3
            return false;
        }
    }
}

相关文章

  • 递归求解迷宫

    效果图 结果图 完整代码

  • 迷宫求解算法(java版)

    迷宫求解算法一直是算法学习的经典,实现自然也是多种多样,包括动态规划,递归等实现,这里我们使用穷举求解,加深对栈的...

  • C/C++游戏开发:用C++制作迷宫游戏,教你做一个属于自己的游

    最初觉得程序的关键应该是求解迷宫,后来发现求解迷宫很简单,难点是如何生成迷宫。 这里采用接合图的深度优先遍历,生成...

  • 数据结构-严蔚敏:栈(进制转换,括号匹配校验,迷宫求解)

    本章包含如下内容1. 进制转换2. 括号匹配校验3. 迷宫求解 进制转换 括号匹配校验 迷宫求解迷宫用二维数组来表...

  • 计算1到100的和

    利用递归求解 用 最笨的方法求解: 用python牛逼的sum求解: 用奇偶相加求解:

  • 递归的基本法则

    基本概念# 基本情形:必须总要有某些基准的情形,他们不用递归就能求解。 不断推进:对于那些要递归求解的情形,递归的...

  • 分治策略

    求解递归式方法 最大子数组问题 分治策略 分治法流程 伪代码 C++实现 线性解 流程 代入法求解递归式 递归树法...

  • 递归简论

    递归的重要法则 基准情形:必须总要有基准的情形,它们不用递归就能求解 不断推进:递归求解过程中总能朝着一个基准的情...

  • 顺序栈的应用四:求解迷宫路径

    迷宫求解 求迷宫中从入口到出口的所有路径是一个典型的程序设计问题。由于计算机解迷宫时,通常用的是”穷举求解“的方法...

  • 迷宫问题求解

    一、目的 1、进一步理解和掌握各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法。 2、掌握分析问题,求解问题...

网友评论

      本文标题:递归求解迷宫

      本文链接:https://www.haomeiwen.com/subject/amtbqktx.html