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入门基础之私有变量
Feb 23 Javascript
javascript 二维数组的实现与应用
Mar 16 Javascript
20个最新的jQuery插件
Jan 13 Javascript
jqGrid随窗口大小变化自适应大小的示例代码
Dec 28 Javascript
js实现登陆遮罩效果的方法
Jul 28 Javascript
jqTransform美化表单
Oct 10 Javascript
JavaScript代码性能优化总结(推荐)
May 16 Javascript
js中小数向上取整数,向下取整数,四舍五入取整数的实现(必看篇)
Feb 13 Javascript
JS实现浏览器打印、打印预览示例
Feb 28 Javascript
vue2过滤器模糊查询方法
Sep 16 Javascript
jQuery分组选择器简单用法示例
Apr 04 jQuery
原生JS实现拖拽功能
Dec 16 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加密解密实例分析
2015/12/25 PHP
Yii2框架中日志的使用方法分析
2017/05/22 PHP
浅谈PHP中的面向对象OOP中的魔术方法
2017/06/12 PHP
thinkphp 中的volist标签在ajax操作中的特殊性(推荐)
2018/01/15 PHP
js window.event对象详尽解析
2009/02/17 Javascript
一个页面元素appendchild追加到另一个页面元素的问题
2013/01/27 Javascript
php析构函数的具体用法小结
2014/03/11 Javascript
jQuery处理XML文件的几种方法
2016/06/14 Javascript
json对象转为字符串,当做参数传递时加密解密的实现方法
2016/06/29 Javascript
如何利用模板将HTML从JavaScript中抽离
2016/10/08 Javascript
Bootstrap入门教程一Hello Bootstrap初识
2017/03/02 Javascript
深入理解Javascript中的作用域链和闭包
2017/04/25 Javascript
node.JS md5加密中文与php结果不一致的解决方法
2017/05/05 Javascript
JavaScript转换数据库DateTime字段类型方法
2017/06/27 Javascript
详解Vue快速零配置的打包工具——parcel
2018/01/16 Javascript
JavaScript变量作用域及内存问题实例分析
2019/06/10 Javascript
深入了解Vue3模板编译原理
2020/11/19 Vue.js
javascript中layim之查找好友查找群组
2021/02/06 Javascript
python 把文件中的每一行以数组的元素放入数组中的方法
2018/04/29 Python
详解Python中的分组函数groupby和itertools)
2018/07/11 Python
Django使用uwsgi部署时的配置以及django日志文件的处理方法
2019/08/30 Python
Python TKinter如何自动关闭主窗口
2020/02/26 Python
python中str内置函数用法总结
2020/12/27 Python
打架检讨书400字
2014/01/17 职场文书
艺术学院毕业生自我评价
2014/03/02 职场文书
导师工作推荐信范文
2014/05/17 职场文书
交通安全标语
2014/06/06 职场文书
加强作风建设工作总结
2014/10/23 职场文书
党员群众路线教育实践活动学习笔记
2014/11/05 职场文书
后勤工作个人总结
2015/02/28 职场文书
公司慰问信范文
2015/03/23 职场文书
2015年行政人事工作总结
2015/05/21 职场文书
2015年法务工作总结范文
2015/05/23 职场文书
2015年信息宣传工作总结
2015/05/26 职场文书
初中政教处工作总结
2015/08/12 职场文书
centos环境下nginx高可用集群的搭建指南
2022/07/23 Servers