题解 | #迷宫问题#


题目链接

迷宫问题

题目描述

定义一个二维数组 N*M ,如 5 × 5 数组下所示:

int maze[5][5] = {
0, 1, 0, 0, 0,
0, 1, 1, 1, 0,
0, 0, 0, 0, 0,
0, 1, 1, 1, 0,
0, 0, 0, 1, 0,
};

它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的路线。入口点为[0,0],既第一格是可以走的路。

本题含有多组数据。

输入描述:

输入两个整数,分别表示二维数组的行数,列数。再输入相应的数组,其中的1表示墙壁,0表示可以走的路。数据保证有唯一解,不考虑有多解的情况,即迷宫只有一条通道。

输出描述:

左上角到右下角的最短路径,格式如样例所示。

示例1

输入:

5 5
0 1 0 0 0
0 1 1 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0

输出:

(0,0)
(1,0)
(2,0)
(2,1)
(2,2)
(2,3)
(2,4)
(3,4)
(4,4)

示例2

输入:

5 5
0 1 0 0 0
0 1 0 1 0
0 0 0 0 1
0 1 1 1 0
0 0 0 0 0

输出:

(0,0)
(1,0)
(2,0)
(3,0)
(4,0)
(4,1)
(4,2)
(4,3)
(4,4)

解题思路

简单寻路,注意多组输入即可。使用的方法是dfs,在每一次到达终点时判断是否为更短路并刷新,就OK。


题解

while (line = readline()) {let nums = line.split(' ');let col = +nums[0];let row = +nums[1];let map = [];for (let i = 0; i < col; i++) {map.push([]);let mapline = readline().split(' ');for (let j = 0; j < row; j++) {map[i][j] = +mapline[j];}}let minLine = [];let nowLine = [];let dir = [[0, 1], [0, -1], [1, 0], [-1, 0]];let book = [];for (let i = 0; i < col; i++) {book.push([]);for (let j = 0; j < row; j++) {book[i][j] = 0;}}let dfs = (x, y) => {nowLine.push(`(${x},${y})`);book[x][y] = 1;if (x == col - 1 && y == row - 1) {if (minLine.length == 0 || nowLine.length < minLine.length) {minLine = [];for (let i = 0; i < nowLine.length; i++) {minLine[i] = nowLine[i];}}book[x][y] = 0;nowLine.pop();return;}for (let i = 0; i < 4; i++) {let tox = x + dir[i][0];let toy = y + dir[i][1];if (tox >= 0 && tox < col && toy >= 0 && toy < row && map[tox][toy] == 0 && book[tox][toy] == 0) {dfs(tox, toy);}}book[x][y] = 0;nowLine.pop();return;}dfs(0, 0);for (let i = 0; i < minLine.length; i++) {console.log(minLine[i]);}
}

[JS][dfs]题解 | #迷宫问题#相关推荐

  1. [AcWing算法刷题]之DFS+BFS迷宫模板(简单)

    题目来源: 题库 - AcWing 目录 DFS和BFS模板题目:迷宫类 机器人的运动范围​ 字母 迷宫 红与黑 棋盘问题 马走日 全球变暖 DFS综合类 乘积最大(提高课) 单词接龙(提高课) 取石 ...

  2. DFS破解“迷宫问题”(洛谷P1605题题解,Java语言描述)

    迷宫 题目要求 P1605题目链接 分析 我的思路还比较容易理解,但确实开的数组太多了(最终代码). 我想开一个递归的DFS搜索,对越界情况进行淘汰 (话说这能算剪枝吗) ,再就是只允许在没被标记为已 ...

  3. DFS 简单迷宫及路径打印

    问题引入 有一天,小哈一个人去玩迷宫.但是方向感不好的小哈很快就迷路了.小哼得知后便去解救无助的小哈.此时的小哼已经弄清楚了迷宫的地图,现在小哼要以最快的速度去解救小哈.那么,问题来了... 问题分析 ...

  4. [JS][dp]题解 | #打家劫舍(一)#

    题解 | #打家劫舍(一)# 题目链接 打家劫舍(一) 题目描述 描述 你是一个经验丰富的小偷,准备偷沿街的一排房间,每个房间都存有一定的现金,为了防止被发现,你不能偷相邻的两家,即,如果偷了第一家, ...

  5. DFS走迷宫问题(非最短路径)

    上面之所以要强调非最短路径,是因为在下一篇我要用BFS来求解最短路径的问题.这里只是讲如何走出迷宫. #include<cstdio> #define M 10 #define N 10 ...

  6. 剑指offer:矩阵中的路径(递归回溯法DFS类似迷宫)

    1. 题目描述 /*请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经 ...

  7. K - 老鼠走迷宫(DFS)

    Description 现在一只老鼠被困在了迷宫里!你需要判断老鼠能否走出迷宫. 老鼠只能向上下左右四个方向移动.我们认为只要老鼠走到了迷宫的边界即算走出迷宫. Input 第一行输入两个整数 n, ...

  8. DFS迷宫递归所有路径 新手入门

    这篇文章写给自己以后复习和个个入门朋友:提示同学们一定耐心看完解释 哪怕看得很难受,我是新手我懂大家的心烦.看完后慢慢体会代码 我们假设迷宫为如下状况:         {0,0,1,0}       ...

  9. python求解迷宫问题,配js实现的走迷宫动画,动起来才有意思~

    前言 继昨天手动实现了走迷宫问题,虽然是实现了,但是看到被我画成乱七八糟的草稿纸,总是觉得不爽,不仔细看,又得把自己给走迷糊了,于是自己使用js实现了一下,效果还不错!先看一下展示效果吧!(文末配有j ...

最新文章

  1. RESTful之视图集ViewSet
  2. Windows10安装Linux子系统Ubuntu 20.04LTS,轻松使用生信软件,效率秒杀虚拟机
  3. 微软将降低Visual Studio对操作系统的影响
  4. plsql存过声明游标_plsql编程学习之游标一
  5. springmvc php,SpringMVC 常用注解
  6. Android 系统(251)---sec2.0和sec2.1新增分区DA客制化步骤
  7. ddd架构 无法重构_DDD有什么用?
  8. 开始菜单下的计算机怎么能看到盘符
  9. OSD仿真_MFC程序01
  10. 免费的Web压力测试工具
  11. Excel表格快速转PDF
  12. 软件测试自学乐器儿童画,查找「国庆节儿童画大全」安卓应用 - 豌豆荚
  13. 北京大学计算机学院刘利,信息科学学院 科研动态 深化新文科计算机教学改革,实施分类分层次教学体系研讨会在京召开...
  14. 谁动了你的 MSN?—— MSN 帐号被盗原因的分析和解决办法,鄙视msnlivesn.com
  15. 我是ASML,除了技术,还有故事
  16. 展讯sprd_battery.c 充电驱动
  17. Tim/QQ文件夹被占用60010
  18. SpringMVC---注意事项
  19. 最小差值(java)
  20. 飞桨赋能润建股份打造智能化路网系统,实现精度速度全面提升

热门文章

  1. 2022-2028年中国安防视频行业市场前景分析预测报告
  2. 2022-2028年中国数据中台行业深度调研及投资前景预测报告(全卷)
  3. 【J2SE】学习基础
  4. LARS 算法简介-机器学习
  5. explain性能分析
  6. Imagination发布四款RISC-V CPU
  7. 实战清除电脑上恶意弹出广告窗口
  8. TensorFlow单层感知机实现
  9. 人工智能芯片支持超低功耗器件的推理
  10. ISP算法高水平分析(上)