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 相关文章推荐
权威JavaScript 中的内存泄露模式
Aug 13 Javascript
JavaScript 保存数组到Cookie的代码
Apr 14 Javascript
菜鸟javascript基础资料整理3 正则
Dec 06 Javascript
基于jquery异步传输json数据格式实例代码
Nov 23 Javascript
js加密解密字符串可自定义密码因子
May 13 Javascript
Javascript基础教程之变量
Jan 18 Javascript
javascript中setTimeout使用指南
Jul 26 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
Jan 10 Javascript
React-Router如何进行页面权限管理的方法
Dec 06 Javascript
微信小程序左右滑动的实现代码
Dec 15 Javascript
关于vue利用postcss-pxtorem进行移动端适配的问题
Nov 20 Javascript
Vue通过配置WebSocket并实现群聊功能
Dec 31 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
浅析PHP绘图技术
2013/07/03 PHP
php文件缓存类用法实例分析
2015/04/22 PHP
PHP排序算法类实例
2015/06/17 PHP
php实现的日历程序
2015/06/18 PHP
详解Yii2高级版引入bootstrap.js的一个办法
2017/03/21 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
2019/10/15 PHP
在js中使用&quot;with&quot;语句中跨frame的变量引用问题
2007/03/08 Javascript
Jquery使用小技巧汇总
2015/12/29 Javascript
详解Node.js包的工程目录与NPM包管理器的使用
2016/02/16 Javascript
AngularJS控制器继承自另一控制器
2016/05/09 Javascript
基于jQuery的AJAX和JSON实现纯html数据模板
2016/08/09 Javascript
chrome下判断点击input上标签还是其余标签的实现方法
2016/09/18 Javascript
jQuery动态增减行的实例代码解析(推荐)
2016/12/05 Javascript
webpack配置的最佳实践分享
2017/04/21 Javascript
js实现登录与注册界面
2017/11/01 Javascript
vue登录注册实例详解
2019/09/14 Javascript
jQuery实现数字华容道小游戏(实例代码)
2020/01/16 jQuery
JS如何在不同平台实现多语言方式
2020/07/16 Javascript
[00:27]DOTA2战队VP、Secret贺新春
2018/02/11 DOTA
python 判断网络连通的实现方法
2018/04/22 Python
Python + Flask 实现简单的验证码系统
2019/10/01 Python
Pytorch之Variable的用法
2019/12/31 Python
详解python安装matplotlib库三种失败情况
2020/07/28 Python
python在linux环境下安装skimage的示例代码
2020/10/14 Python
Python Pandas数据分析工具用法实例
2020/11/05 Python
python RSA加密的示例
2020/12/09 Python
canvas简易绘图的实现(海绵宝宝篇)
2018/07/04 HTML / CSS
猫途鹰英国网站:TripAdvisor英国(旅游社区和旅游评论)
2016/08/30 全球购物
欧洲最大的品牌水上运动服装和设备在线零售商:Wuituit Outlet
2018/05/05 全球购物
英国羊绒服装购物网站:Pure Collection
2018/10/22 全球购物
团队队名口号大全
2014/06/06 职场文书
承诺书样本
2014/08/30 职场文书
开业典礼致辞
2015/07/29 职场文书
基于python制作简易版学生信息管理系统
2021/04/20 Python
html5 录制mp3音频支持采样率和比特率设置
2021/07/15 Javascript
python的变量和简单数字类型详解
2021/09/15 Python