Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >迷宫解算器

迷宫解算器
EN

Stack Overflow用户
提问于 2015-04-16 01:38:39
回答 2查看 783关注 0票数 0

我需要为APCS编写一个迷宫求解程序,其中涉及一个基于文本的1和0矩阵。我必须编写代码来查找从坐标0,0到右侧任意位置的路径,如果有路径的话。这是我到目前为止所掌握的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Maze {
    private int[][] maze;
    private int sizes = 0;
    private boolean[][] checked;

    public Maze(int size, String line) {
        checked = new boolean[size][size];
        sizes = size;
        out.println(sizes - 1);
        Scanner joe = new Scanner(line);
        maze = new int[size][size];
        for (int x = 0; x < size; x++) {
            for (int y = 0; y < size; y++) {
                maze[x][y] = joe.nextInt();
            }
        }
    }

    public boolean hasExitPath(int r, int c) {
        boolean solved = false;
        boolean wall = false;

        if (r == sizes - 1) {
            solved = true;
            return solved;
        }

        maze[r][c] = 2;
        if (maze[r + 1][c] == 1) {
            out.println("down");
            hasExitPath(r + 1, c);
        }else if (maze[r][c + 1] == 1) {
            out.println("left");
            hasExitPath(r, c + 1);
        }else if (maze[r - 1][c] == 1) {
            out.println("up");
            hasExitPath(r - 1, c);
        }else if (maze[r][c - 1] == 1) {
            out.println("right");
            hasExitPath(r, c - 1);
        }
        System.out.println(r + " " + c);
        return solved;
    }

    public String toString() {
        String output = "";
        for (int y = 0; y < sizes; y++) {
            for (int x = 0; x < sizes; x++) {
                output = output + maze[y][x];
            }
            output = output + "\n";
        }
        return output;
    }
}

下面是主类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MazeRunner {
    public static void main(String args[]) throws IOException {
        Scanner mazeinfo = new Scanner(new File("maze.dat"));

        int size = mazeinfo.nextInt();
        mazeinfo.nextLine();
        String b = mazeinfo.nextLine();
        Maze m = new Maze(size, b);
        out.println(m);
        out.println(m.hasExitPath(0, 0));

        size = mazeinfo.nextInt();
        mazeinfo.nextLine();
        b = mazeinfo.nextLine();
        m = new Maze(size, b);
        out.println(m);
        out.println(m.hasExitPath(0, 0));

        size = mazeinfo.nextInt();
        mazeinfo.nextLine();
        b = mazeinfo.nextLine();
        m = new Maze(size, b);
        out.println(m);
        out.println(m.hasExitPath(0, 0));

        size = mazeinfo.nextInt();
        mazeinfo.nextLine();
        b = mazeinfo.nextLine();
        m = new Maze(size, b);
        out.println(m);
        out.println(m.hasExitPath(0, 0));

        size = mazeinfo.nextInt();
        mazeinfo.nextLine();
        b = mazeinfo.nextLine();
        m = new Maze(size, b);
        out.println(m);
        out.println(m.hasExitPath(0, 0));

        size = mazeinfo.nextInt();
        mazeinfo.nextLine();
        b = mazeinfo.nextLine();
        m = new Maze(size, b);
        out.println(m);
        out.println(m.hasExitPath(0, 0));
    }
}

以下是需要解决的迷宫的图像

https://drive.google.com/file/d/0BzE3Cu7SjRlNdzRHYjM4UzZkY00/view?usp=sharing

我在hasExitPath方法中添加了一组调试代码,以帮助我了解所发生的事情。无论何时我运行这个程序,它似乎都无法跟踪迷宫。我需要向此程序添加哪些内容?

EN

回答 2

Stack Overflow用户

发布于 2015-04-16 01:48:20

除非r == size - 1为true,否则调用hasExitPath(r , c)将始终返回false。由于您从r == 0开始,并且size > 0为true,因此代码将始终以false开始。使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if(hasExitPath(r + 1, c))
     return true;

而不是简单地调用hasExitPath(r + 1, c);来解决这个问题(对hasExitPath(r , c)的所有其他递归调用也是如此)。

票数 3
EN

Stack Overflow用户

发布于 2015-04-16 03:25:31

我建议不要使用递归方法,如果迷宫变得足够大,可能会出现堆栈溢出问题。我建议你做的是根据你行进的方向进行操作,并根据你是否到达交叉口或死胡同来重新评估方向。我可以给你一些代码的链接,这些代码可以解决迷宫问题,而不是使用二维数组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29663904

复制
相关文章
Sudoku Explainer(数独解算器,源码)
http://www.downza.cn/soft/314282.html 偶然碰见一款数独解算器 我比较懵逼 附带一本说明书 用java写的,看不懂
云深无际
2021/08/20
1.2K0
回溯算法解迷宫问题(java版)
    以一个M×N的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计程序,对任意设定的迷宫,求出从入口到出口的所有通路。
天涯泪小武
2019/01/17
2K0
四旋翼飞行器姿态控制(四轴飞行器姿态解算)
姿态航向参考系统AHRS(Attitude and Heading Reference System)
全栈程序员站长
2022/08/01
1.4K0
四旋翼飞行器姿态控制(四轴飞行器姿态解算)
四旋翼姿态解算之理论推导
对于每个像我一样入坑四轴飞行器不久的新手来说,最初接触也颇为头疼的东西之一就是四轴的姿态解算。由于涉及较多的数学知识,很多人也是觉得十分头疼。所以,我在这里分享一些我学习过程中的笔记和经验,以便大家学习。
努力努力再努力F
2018/09/11
1.4K0
四旋翼姿态解算之理论推导
大规模开源线性代数求解器(Eigen,LAPACK,Ceres)+JSim数值解算器+Plot Digitizer
LAPACK 是用 Fortran 90 编写的,提供用于求解联立线性方程组、线性方程组的最小二乘解、特征值问题和奇异值问题的例程。还提供了相关的矩阵分解(LU、Cholesky、QR、SVD、Schur、广义 Schur),以及相关计算,例如 Schur 分解的重新排序和估计条件数。处理密集矩阵和带状矩阵,但不处理一般稀疏矩阵。在所有领域,都为单精度和双精度实数和复数矩阵提供了类似的功能。
云深无际
2021/12/08
2K0
大规模开源线性代数求解器(Eigen,LAPACK,Ceres)+JSim数值解算器+Plot Digitizer
MPU6050姿态解算方式1-DMP
MPU6050的姿态解算方法有多种,包括硬件方式的DMP解算,软件方式的欧拉角与旋转矩阵解算,软件方式的轴角法与四元数解算。本篇先介绍最易操作的DMP方式。
xxpcb
2020/08/04
2.9K0
迷宫回溯
给定一个迷宫,指明起点和终点,找出从起点出发到终点的有效可行路径,就是迷宫问题(maze problem)。
JusterZhu
2022/12/07
5920
迷宫回溯
迷宫-BFS
终点。迷宫中除了可以向上下左右四个方向移动一格以外, 还有m个双向传送门可以使用, 传送门可以连接两个任意格子。
别团等shy哥发育
2023/10/17
3270
迷宫-BFS
1215 迷宫
1215 迷宫 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 在N*N的迷宫内,“#”为墙,“.”为路,“s”为起点,“e”为终点,一共4个方向可以走。从左上角((0,0)“s”)位置处走到右下角((n-1,n-1)“e”)位置处,可以走通则输出YES,不可以走则输出NO。 输入描述 Input Description 输入的第一行为一个整数m,表示迷宫的数量。  其后每个迷宫数据的第一行为一个整数n(n≤16),表示迷宫的
attack
2018/04/12
1.3K0
1455: [蓝桥杯2019初赛]迷宫
题目 下图给出了一个迷宫的平面图,其中标记为1 的为障碍,标记为0 的为可 以通行的地方。 010000 000100 001001 110000 迷宫的入口为左上角,出口为右下角,在迷宫中,只能从一个位置走到这 个它的上、下、左、右四个方向之一。 对于上面的迷宫,从入口开始,可以按DRRURRDDDR 的顺序通过迷宫, 一共10 步。其中D、U、L、R 分别表示向下、向上、向左、向右走。 对于下面这个更复杂的迷宫(30 行50 列),请找出一种通过迷宫的方式, 其使用的步数最少,在步数最少的前提下,请找
可爱见见
2020/02/26
1.4K0
MPU6050姿态解算2-欧拉角&旋转矩阵
注:本篇中的一些图采用横线放置,若观看不方便,可点击文章末尾的阅读原文跳转到网页版
xxpcb
2020/08/26
3.4K0
MPU6050姿态解算2-欧拉角&旋转矩阵
第四范式下的科教研:算力困局怎么解?
第一范式是经验证据,源于对自然现象的观察和实验总结;第二范式是理论科学,对自然界某些规律做出原理性的解释;第三范式是计算科学,通过计算模型与系统模拟进行复杂过程的科学研究;第四范式是数据科学,即在实验观测、理论推演、计算仿真之后数据驱动的科学研究方式。
Alter聊科技
2023/01/13
4160
第四范式下的科教研:算力困局怎么解?
第一范式是经验证据,源于对自然现象的观察和实验总结;第二范式是理论科学,对自然界某些规律做出原理性的解释;第三范式是计算科学,通过计算模型与系统模拟进行复杂过程的科学研究;第四范式是数据科学,即在实验观测、理论推演、计算仿真之后数据驱动的科学研究方式。
Alter聊科技
2022/09/26
5590
第四范式下的科教研:算力困局怎么解?
蚂蚁走迷宫
有一只蚂蚁出去寻找食物,无意中进入了一个迷宫。蚂蚁只能向上、下、左、右4个方向走,迷宫中有墙和水的地方都无法通行。这时蚂蚁犯难了,怎样才能找出到食物的最短路径呢?
小K算法
2021/05/31
1.6K0
1167. 迷宫
1167. 迷宫 (Standard IO) 时间限制: 1000 ms  空间限制: 262144 KB  具体限制  题目描述 设有一个N*N(2<=N<10)方格的迷宫,入口分别在左上角和右上角。迷宫格子中分别放0和1,0表示可通,1,表示不能通过,入口和出口肯定是0。迷宫走的规则如下:即从某个点开始,又八个方向可走,前进方格中的数字为0时表示可以通过,为1时表示不可通过,要另找路径。找出所有从入口(左上角)到出口(右上角)的路径(不能重复),输出路径总数,如果无法到达,则输出0。 输入 第一行输入
attack
2018/04/12
7020
迷宫问题(bfs)
迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9112 Accepted: 5392 Description 定义一个二维数组: int maze[5][5] = {
Max超
2019/01/21
7870
蓝桥杯-迷宫
已知一个30行50列的方格,方格由0和1组成,1 表示障碍物,0表示可行的方块。人从最上边开始行走,逃出这个迷宫,走到最右下角的位置。每次可以行走的方向有上下左右四个位置。向下向上向左向右分别记作DULR,并且从最上边的位置到最下边的位置有很多方法,要求记录L,D,U,R,若有多种方法,要求输出所有记录当中长度最小且字典序最小的方法。
用户10271432
2023/02/13
6290
蓝桥杯-迷宫
7.2 冷凝器算例
本小节以冷凝器设计为算例,说明javascript在小型制冷设备中的应用。分别从从应用程序前端界面、脚本计算程序、及图纸输出3部分进行介绍。(完) 此文水一下,并没有什么实质内容,分享几张动图欣赏:
周星星9527
2019/04/26
3190
7.2 冷凝器算例
ceres实现的pnp解算后的位姿优化代码详解
这篇文章作为基础文章也是本文的学习和理解的过程,在将会给出更多的注释和“废话”帮助自己理解。同时有错误的话欢迎各位朋友留言指教。
点云PCL博主
2022/01/27
2.3K0
迷宫算法(DFS)
1.如果采用堆栈进行迷宫探测,则称之为深度优先搜索(DFS),它和递归的探测思路是基本一致的,可以看成是递归方式的非递归版本;
大忽悠爱学习
2021/03/08
3.9K0

相似问题

墙跟随迷宫解算器

20

递归解算迷宫

10

递归蛮力迷宫解算器

10

Java学习迷宫解算器

12

基于OpenCV的迷宫解算器

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文