JS实现深度优先搜索求解两点间最短路径


Posted in Javascript onJanuary 17, 2019

本文实例为大家分享了JS实现深度优先搜索求解两点间最短路径的具体代码,供大家参考,具体内容如下

效果:

找出图里点到点最短路径,并打印轨迹

图片如下所示:

JS实现深度优先搜索求解两点间最短路径

代码:

const map = [
  [0, 1, 1, 0, 1],
  [1, 0, 0, 1, 0],
  [1, 0, 0, 0, 1],
  [0, 1, 0, 0, 0],
  [1, 0, 1, 0, 0]
]

function dfsManager(map, start, end){

  var min = 9999,
    path = [],
    unvisited = [];
  for(let i=0; i<5;i++){
    unvisited[i] = true
  }

  (function dfs(map, start, end, step){
    //unvisited[start] = false //不重复访问最后的节点
    if(start === end){
      console.log('step:',step)
      for(let i=0; i<path.length; i++){
        if(path[i] >= 0){
          console.log(path[i]+'->')
        }
      }
      if(min > step){
        min = step
      }
      return
    }
    unvisited[start] = false  //要重复访问最后的节点
    let len = map.length

    for(let i=0; i<len; i++){
      if(map[start][i] === 1 && unvisited[i]){
        path.push(i)  //记录路径
        dfs(map, i, end, step+1)
        path.pop()   //避免污染其他路径
      }
    }
  })(map, start, end, 0)

  return min
}

console.log('min:',dfsManager(map,3,4))

output:

step: 4
1->
0->
2->
4->
step: 3
1->
0->
4->
min: 3

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery 屏蔽一个区域内的所有元素,禁止输入
Oct 22 Javascript
JavaScript中继承的一些示例方法与属性参考
Aug 07 Javascript
在JS中解析HTML字符串示例代码
Apr 16 Javascript
jquery实现的简单二级菜单效果代码
Sep 22 Javascript
深入分析jsonp协议原理
Sep 26 Javascript
JS模拟简易滚动条效果代码(附demo源码)
Apr 05 Javascript
漂亮实用的页面loading(加载)封装代码
Feb 03 Javascript
React Native基础入门之初步使用Flexbox布局
Jul 02 Javascript
jQuery实现的页面弹幕效果【测试可用】
Aug 17 jQuery
详解微信小程序获取当前时间及日期的方法
Apr 28 Javascript
使用Angular9和TypeScript开发RPG游戏的方法
Mar 25 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
Jul 26 Javascript
JS使用Dijkstra算法求解最短路径
Jan 17 #Javascript
JavaScript简单实现的仿微博留言功能示例
Jan 17 #Javascript
vue权限管理系统的实现代码
Jan 17 #Javascript
使用nvm和nrm优化node.js工作流的方法
Jan 17 #Javascript
JS使用Prim算法和Kruskal算法实现最小生成树
Jan 17 #Javascript
微信小程序使用wxParse解析html的方法示例
Jan 17 #Javascript
nvm、nrm、npm 安装和使用详解(小结)
Jan 17 #Javascript
You might like
跟我学小偷程序之成功偷取首页(第三天)
2006/10/09 PHP
PHP及Zend Engine的线程安全模型分析
2011/11/10 PHP
php生成Android客户端扫描可登录的二维码
2016/05/13 PHP
提高网站性能之 如何对待JavaScript
2009/10/31 Javascript
js function定义函数使用心得
2010/04/15 Javascript
js 禁止选择功能实现代码(兼容IE/Firefox)
2010/04/23 Javascript
JavaScript游戏之优化篇
2010/11/08 Javascript
Jquery封装tab自动切换效果的具体实现
2013/07/13 Javascript
JS判断客户端是手机还是PC的2个代码
2014/04/12 Javascript
javascript中Array数组的迭代方法实例分析
2015/02/04 Javascript
js实现从中间开始往上下展开网页窗口的方法
2015/03/02 Javascript
为jQuery-easyui的tab组件添加右键菜单功能的简单实例
2016/10/10 Javascript
javascript显示系统当前时间代码
2016/12/29 Javascript
vue父子组件的数据传递示例
2017/03/07 Javascript
vue.js内部自定义指令与全局自定义指令的实现详解(利用directive)
2017/07/11 Javascript
Angularjs实现上传图片预览功能
2017/09/01 Javascript
Vue2.0父组件与子组件之间的事件发射与接收实例代码
2017/09/19 Javascript
JavaScript递归函数定义与用法实例分析
2019/01/24 Javascript
微信小程序基于高德地图查找位置并显示文字
2019/10/30 Javascript
Javascript节流函数throttle和防抖函数debounce
2020/12/03 Javascript
Python中Class类用法实例分析
2015/11/12 Python
Django进阶之CSRF的解决
2018/08/01 Python
python+unittest+requests实现接口自动化的方法
2018/11/29 Python
springboot配置文件抽离 git管理统 配置中心详解
2019/09/02 Python
Pandas时间序列:重采样及频率转换方式
2019/12/26 Python
Pytorch 实现权重初始化
2019/12/31 Python
CSS3教程:新增加的结构伪类
2009/04/02 HTML / CSS
HTML5 Canvas实现图片缩放、翻转、颜色渐变的代码示例
2016/02/28 HTML / CSS
TUMI香港官网:国际领先的行李箱、背囊品牌
2021/03/01 全球购物
销售类个人求职信范文
2013/09/25 职场文书
护理专业自荐信
2013/12/03 职场文书
《一本男孩子必读的书》教学反思
2014/02/19 职场文书
初中同学会活动方案
2014/08/22 职场文书
高中政治教学反思
2016/02/23 职场文书
css实现文章分割线样式的多种方法总结
2021/04/21 HTML / CSS
Python opencv缺陷检测的实现及问题解决
2021/04/24 Python