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 相关文章推荐
IE6下JS动态设置图片src地址问题
Jan 08 Javascript
jQuery对象与DOM对象之间的相互转换
Mar 03 Javascript
简化版手机端照片预览组件
Apr 13 Javascript
Bootstrap每天必学之警告框插件
Apr 26 Javascript
利用Javascript仿Excel的数据透视分析功能
Sep 07 Javascript
JS正则匹配URL网址的方法(可匹配www,http开头的一切网址)
Jan 06 Javascript
使用Promise链式调用解决多个异步回调的问题
Jan 15 Javascript
Vue.js父与子组件之间传参示例
Feb 28 Javascript
详解vuelidate 对于vueJs2.0的验证解决方案
Mar 09 Javascript
详解vue数据渲染出现闪烁问题
Jun 29 Javascript
30分钟快速实现小程序语音识别功能
Nov 27 Javascript
vue3引入highlight.js进行代码高亮的方法实例
Apr 08 Vue.js
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和MySQL保存和输出图片
2006/10/09 PHP
PHP中全局变量global和$GLOBALS[]的区别分析
2012/08/06 PHP
php daddslashes()和 saddslashes()有哪些区别分析
2012/10/26 PHP
PHP gbk环境下json_dencode传送来的汉字
2012/11/13 PHP
PHP利用REFERER根居访问来地址进行页面跳转
2013/09/28 PHP
PHP获取中英混合字符串长度的方法
2014/06/07 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
利用JQuery+EasyDrag 实现弹出可拖动的Div,同时向Div传值,然后返回Div选中的值
2009/10/24 Javascript
用jquery实现等比例缩放图片效果插件
2010/07/24 Javascript
jQuery之尺寸调整组件的深入解析
2013/06/19 Javascript
JavaScript必知必会(二) null 和undefined
2016/06/08 Javascript
基于JS设计12306登录页面
2016/12/28 Javascript
Vue框架中正确引入JS库的方法介绍
2017/07/30 Javascript
基于node.js之调试器详解
2017/08/22 Javascript
Angular2实现的秒表及改良版示例
2019/05/10 Javascript
TypeScript的安装、使用、自动编译的实现
2020/04/10 Javascript
浅谈python字典多键值及重复键值的使用
2016/11/04 Python
Python中__slots__属性介绍与基本使用方法
2018/09/05 Python
Python实现连接MySql数据库及增删改查操作详解
2019/04/16 Python
python实现京东订单推送到测试环境,提供便利操作示例
2019/08/09 Python
Python 使用threading+Queue实现线程池示例
2019/12/21 Python
移动Web—CSS为Retina屏幕替换更高质量的图片
2012/12/24 HTML / CSS
html5构建触屏网站之touch事件介绍
2013/01/07 HTML / CSS
世界著名的顶级牛排:Omaha Steak(奥马哈牛排)
2016/09/20 全球购物
国际金融专业大学生职业生涯规划书
2013/12/28 职场文书
幼儿园老师辞职信
2014/01/20 职场文书
给水工程专业毕业生自荐信
2014/01/28 职场文书
舞蹈毕业生的自我评价
2014/03/05 职场文书
档案信息化建设方案
2014/05/16 职场文书
大学毕业典礼演讲稿
2014/09/09 职场文书
党的群众路线剖析材料
2014/10/09 职场文书
2014年妇幼保健工作总结
2014/12/08 职场文书
家长会欢迎词
2015/01/23 职场文书
停水通知
2015/04/16 职场文书
Jupyter Notebook 如何修改字体和大小以及更改字体样式
2021/06/03 Python