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 相关文章推荐
extjs 学习笔记(二) Ext.Element类
Oct 13 Javascript
网页防止tab键的使用快速解决方法
Nov 07 Javascript
iframe实用操作锦集
Apr 22 Javascript
JavaScript中字符串与Unicode编码互相转换的实现方法
Dec 18 Javascript
百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换
Feb 19 Javascript
jquery div模态窗口的简单实例
May 28 Javascript
Angular X中使用ngrx的方法详解(附源码)
Jul 10 Javascript
Angular2+如何去除url中的#号详解
Dec 20 Javascript
vue中使用heatmapjs的示例代码(结合百度地图)
Sep 05 Javascript
如何将百度地图包装成Vue的组件的方法步骤
Feb 12 Javascript
微信小程序解析富文本过程详解
Jul 13 Javascript
绘制微信小程序验证码功能的实例代码
Jan 05 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
全国FM电台频率大全 - 24 贵州省
2020/03/11 无线电
PHP随机生成唯一HASH值自定义函数
2015/04/20 PHP
ie 调试javascript的工具
2009/04/29 Javascript
JavaScript 组件之旅(一)分析和设计
2009/10/28 Javascript
jquery向.ashx文件post中文乱码问题的解决方法
2011/03/28 Javascript
基于jquery的二级联动菜单实现代码
2011/04/25 Javascript
Javascript 异步加载详解(浏览器在javascript的加载方式)
2012/05/20 Javascript
深入理解javascript的执行顺序
2014/04/04 Javascript
JSP中使用JavaScript动态插入删除输入框实现代码
2014/06/13 Javascript
JS实现往下不断流动网页背景的方法
2015/02/27 Javascript
JavaScript对Cookie进行读写操作实例
2015/07/25 Javascript
jQuery Easyui DataGrid点击某个单元格即进入编辑状态焦点移开后保存数据
2016/08/15 Javascript
详解Javascript数据类型的转换规则
2016/12/12 Javascript
jQuery简单实现MD5加密的方法
2017/03/03 Javascript
jQuery实现扑克正反面翻牌效果
2017/03/10 Javascript
详谈ES6中的迭代器(Iterator)和生成器(Generator)
2017/07/31 Javascript
js实现左右两侧浮动广告
2018/07/09 Javascript
简化版的vue-router实现思路详解
2018/10/19 Javascript
JavaScript刷新页面的几种方法总结
2019/03/28 Javascript
JavaScript使用表单元素验证表单的示例代码
2019/08/20 Javascript
JavaScript实现矩形块大小任意缩放
2020/08/25 Javascript
Python3实现从文件中读取指定行的方法
2015/05/22 Python
VTK与Python实现机械臂三维模型可视化详解
2017/12/13 Python
Python中遍历列表的方法总结
2019/06/27 Python
pytorch查看torch.Tensor和model是否在CUDA上的实例
2020/01/03 Python
Python3实现发送邮件和发送短信验证码功能
2020/01/07 Python
python动态文本进度条的实例代码
2020/01/22 Python
深入浅析css3 中display box使用方法
2015/11/25 HTML / CSS
施华洛世奇西班牙官网:SWAROVSKI西班牙
2019/06/06 全球购物
Mybag美国/加拿大:英国奢华包包和名牌手袋网站
2020/02/16 全球购物
Linux文件操作命令都有哪些
2015/02/27 面试题
视光学毕业生自荐书范文
2014/02/13 职场文书
团队口号大全
2014/06/06 职场文书
政协调研汇报材料
2014/08/15 职场文书
2015年外联部工作总结
2015/04/03 职场文书
2016年元旦致辞
2015/08/01 职场文书