所谓深度优先算法,百科的解答是这样的

深度优先搜索算法(Depth-First-Search),简称DFS,是搜索算法的一种。是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。属于盲目搜索。

通俗的说,就是足够“深”的遍历树的所有节点分支并且遍历过的节点不会再去访问,很适合做网络爬虫,你懂得^ ^


而迷宫问题也是数据结构里面一道经典的问题了,首先我们先用矩阵创建一个迷宫;

const arr = [[0,0,0,1,0],[0,1,1,1,0],[0,1,0,0,0],[0,0,0,1,0],[0,1,1,1,0]];

其中数字1代表墙壁,数字0代表路,最左上角代表入口,最右下角代表出口,这里我们不考虑“死路”的情况

const arr = [[0,0,0,1,0],[0,1,1,1,0],[0,1,0,0,0],[0,0,0,1,0],[0,1,1,1,0]
];//创建迷宫const pathX = [1,-1,0,0];//创建一个数组代表上下左右,在advance这个函数会用到
const pathY = [0,0,-1,1];//同上,区别在于矩阵的行和列
let _arrLength = arr.length-1;
let _arrElementLength = arr[0].length-1;
let i=0,j=0;
(function(){console.time("time")//用于测试运算时间arr[0][0] = 3;//数字3代表已经走过的路,一开始默认从入口进入function matrix(i,j){let k,newi,newj;for(k = 0;k<4;k++){ //上下左右总共四个方向if (advance(i,j,k)) {   /*通过advance函数的判断返回一个可走的路的点*/newi = i + pathX[k];newj = j + pathY[k];   arr[newi][newj] = 3;//将这个点定义为已走过的点/*判断此时是否已经到了终点如果没有则递归*/if (newi == _arrLength && newj == _arrElementLength) {end()} else {   matrix(newi,newj);   }   }}arr[i][j] = 2}matrix(0,0)function advance(i,j,k){var bool = true;/*每走一步路就判断其上下左右是否还有路可走*/i += pathX[k];j += pathY[k];/*判断临界范围,保证在迷宫范围内*/if(i<0||i>_arrLength||j<0||j>_arrElementLength){bool = false;}else if(arr[i][j]!=0){bool = false;}return bool;}/*负责输出结果*/function end(){let i,j,newArr=[];for (i = 0; i < _arrLength+1; i++) {   for (j = 0; j < _arrLength+1; j++) {   if (arr[i][j] == 3) { newArr.push("V");  } else {   newArr.push("*");   }}   }/*下面这段代码只是为了能够在控制台看得更直观,可无,因为写得有点笨拙*/newArr.splice(0,0,"")newArr.splice(6,0,"\n");newArr.splice(12,0,"\n");newArr.splice(18,0,"\n");newArr.splice(24,0,"\n");console.log(newArr.join(" "));}console.timeEnd("time")
})()

最终的路线图如下

采用矩阵+深度优先算法解决迷宫问题相关推荐

  1. 利用广度优先和深度优先算法解决迷宫问题【算法设计与分析】<图搜索问题>

    实验问题: 给定一个n*n的迷宫,要求利用广度优先和深度优先算法解决迷宫问题 问题分析: 对于此问题首先要明确搜索顺序 可以分为两种方法求解问题:1.广度优先算法2.深度优先算法 (1)对于深度优先算 ...

  2. 求素数mdp c语言问题,C语言使用深度优先搜索算法解决迷宫问题(堆栈)

    本文实例讲述了C语言使用深度优先搜索算法解决迷宫问题.分享给大家供大家参考,具体如下: 深度优先搜索 伪代码 (Pseudocode)如下: 将起点标记为已走过并压栈; while (栈非空) { 从 ...

  3. 新颖性搜索(Novelty Search,NS)算法实践——利用NS算法解决迷宫导航问题

    新颖性搜索(Novelty Search,NS)算法实践--利用NS算法解决迷宫导航问题 新颖性搜索(Novelty Search,NS)算法介绍 NS实现基础 NovItem NoveltyArch ...

  4. 神经进化算法——利用NEAT算法解决迷宫导航问题(基于NEAT-Python)

    神经进化算法--利用NEAT算法解决迷宫导航问题(基于NEAT-Python) 迷宫导航问题 迷宫环境模拟 迷宫导航智能体 迷宫环境实现 传感器数据生成 导航智能体 智能体位置更新 智能体记录存储 智 ...

  5. 使用深度优先搜索算法解决迷宫问题

    英文 | https://bytefish.medium.com/use-depth-first-search-algorithm-to-solve-a-maze-ae47758d48e7 翻译 | ...

  6. 回溯算法解决迷宫问题

    文章目录 前言 一.回溯法 二.算法应用--迷宫问题 1.问题描述 2.解题思路 三.Java代码实现 前言 本文介绍一种经典算法--回溯法,可作为迷宫问题的一种解法. 一.回溯法 回溯是一种算法思想 ...

  7. 深度优先算法解决有向有权图的最短路径问题

    从城市1到城市到城市3有很多条路,每条路的路况各不相同,所耗费的时间都标记在了箭头上,现在需要找出从1到3的最短路径. 有向图:意思是来回的路径值可以是不一样的 有权图:意思是每套路径的值可以是不一样 ...

  8. 人工智能 - A*算法解决迷宫问题 附源码和可视化显示

    写在最前,先附上可视化后的效果: 一.问题描述 迷宫问题可以表述为:一个二维的网格,0 表示点可走,1 表示点 不可以走,点用(x,y)表示,寻找从某一个给定的起始单元格出发, 经由行相邻或列相邻的单 ...

  9. 深度优先算法--判断迷宫的一个起点能否到达一个终点

    题目描述: 小老鼠Jerry生活在一个庞大的迷宫里,每天靠吃奶酪填饱自己的肚子.一天,它发现自己辛辛苦苦攒积的奶酪不见了.于是在迷宫里开始它的搜寻计划.迷宫是一个N*M(N,M均不超过20)的棋盘,如 ...

最新文章

  1. 找不到命令报错bash:command not found解决方案
  2. 你说 Arthas 诊断问题不好用?watch 命令了解多少?
  3. CodeForces509F Progress Monitoring
  4. Virtualbox桥接网卡设置
  5. httpsurlconnection 写不进去authorization值_23. 假设检验的时候为什么常写p lt; 0.05,而不写具体的p值?...
  6. 最全面的MySQL面试题大全-二
  7. SPOJ AMR12B 720
  8. MQTT服务器搭建和测试步骤及遇见的问题
  9. 贴吧用html标签,html标签3(转载)
  10. 荒野行动系统推荐观战榜_荒野行动如何进行观战 荒野行动观战系统使用详解...
  11. SQL进阶六:字符串函数
  12. Selenium学习(11) 网页截图
  13. Win7 局域网内简单共享的设置
  14. CAD 绘图如何有效的控制精度?
  15. ThoughtWorks培训感想
  16. Linux下GoldenDict的安装与使用
  17. 计算机大赛鼓励语录,比赛前的鼓励的话
  18. Python re模块 —— 从零基础开始入门正则表达式
  19. jquery--图片传送带
  20. 如何实现微信二维码支付功能???

热门文章

  1. 零基础Java学习之类和对象
  2. 如何快速开发一个博客
  3. asp.net core 2使用本地https证书
  4. 显示windows电脑上已连接过的wifi密码
  5. util.Date与sql.Date的相互转换以及区别
  6. [Python]小甲鱼Python视频第32课(except)课后题及参考解答
  7. Java中的基本类型变量储存方式
  8. Windows Server2012R2 FTP服务器配置
  9. Skynet入门范例之sproto
  10. c++多线程编程:常见面试题