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写的简单的计算器,内容很多,方法实用,推荐
Dec 29 Javascript
js 本地预览的简单实现方法
Feb 18 Javascript
jQuery使用load()方法载入另外一个网页文件内的指定标签内容到div标签的方法
Mar 25 Javascript
jQuery给多个不同元素添加class样式的方法
Mar 26 Javascript
jQuery插件passwordStrength密码强度指标详解
Jun 24 Javascript
js实现添加可信站点、修改activex安全设置,禁用弹出窗口阻止程序
Aug 17 Javascript
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
Feb 16 Javascript
vue 页面加载进度条组件实例
Feb 05 Javascript
详解node.js的http模块实例演示
Jul 12 Javascript
JavaScript和TypeScript中的void的具体使用
Sep 12 Javascript
koa2的中间件功能及应用示例
Mar 05 Javascript
在vue中使用jsonp进行跨域请求接口操作
Oct 29 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图像处理类代码分享
2012/01/19 PHP
如何在Ubuntu下启动Apache的Rewrite功能
2013/07/05 PHP
jquery 插件开发方法小结
2009/10/23 Javascript
Javascript匿名函数的一种应用 代码封装
2010/06/27 Javascript
javascript学习(二)javascript常见问题总结
2013/01/02 Javascript
Javascript中call和apply函数的比较和使用实例
2015/02/03 Javascript
js性能优化技巧
2015/11/29 Javascript
iOS + node.js使用Socket.IO框架进行实时通信示例
2017/04/14 Javascript
微信小程序的日期选择器的实例详解
2017/09/29 Javascript
Vue组件内部实现一个双向数据绑定的实例代码
2019/04/04 Javascript
vue.js 2.0实现简单分页效果
2019/07/29 Javascript
JQuery使用属性addClass、removeClass和toggleClass实现增加和删除类操作示例
2019/11/18 jQuery
详解JavaScript作用域 闭包
2020/07/29 Javascript
解决Vue-Router升级导致的Uncaught (in promise)问题
2020/08/07 Javascript
[01:45]DOTA2新英雄“神谕者”全方位展示
2014/11/21 DOTA
[02:10]2018DOTA2亚洲邀请赛赛前采访-Liquid
2018/04/03 DOTA
Python中解析JSON并同时进行自定义编码处理实例
2015/02/08 Python
详解Python中的__new__()方法的使用
2015/04/09 Python
python使用fileinput模块实现逐行读取文件的方法
2015/04/29 Python
Python实现Sqlite将字段当做索引进行查询的方法
2016/07/21 Python
5个很好的Python面试题问题答案及分析
2018/01/19 Python
Python打印输出数组中全部元素
2018/03/13 Python
python2和python3的输入和输出区别介绍
2018/11/20 Python
详解python中的hashlib模块的使用
2019/04/22 Python
python实现雪花飘落效果实例讲解
2019/06/18 Python
libreoffice python 操作word及excel文档的方法
2019/07/04 Python
Python pandas实现excel工作表合并功能详解
2019/08/29 Python
Keras之fit_generator与train_on_batch用法
2020/06/17 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
2020/09/20 Python
Python爬虫如何破解JS加密的Cookie
2020/11/19 Python
html5实现九宫格抽奖可固定抽中某项奖品
2020/06/15 HTML / CSS
集体生日活动方案
2014/08/18 职场文书
2014年银行客户经理工作总结
2014/11/12 职场文书
2015年六一儿童节演讲稿
2015/03/19 职场文书
2016年清明节红领巾广播稿
2015/12/17 职场文书
Python OpenCV实现图形检测示例详解
2022/04/08 Python