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 相关文章推荐
js函数在frame中的相互调用详解
Mar 03 Javascript
js判断浏览器类型为ie6时不执行
Jun 15 Javascript
JQuery插件iScroll实现下拉刷新,滚动翻页特效
Jun 22 Javascript
jQuery+css3动画属性制作猎豹浏览器宽屏banner焦点图
Mar 16 Javascript
iScroll.js 使用方法参考
May 16 Javascript
浅谈JS中的三种字符串连接方式及其性能比较
Sep 02 Javascript
浅谈Javascript中的函数、this以及原型
Oct 09 Javascript
使用Ajax生成的Excel文件并下载的实例
Nov 21 Javascript
vue.js的computed,filter,get,set的用法及区别详解
Mar 08 Javascript
js使用Promise实现简单的Ajax缓存
Nov 14 Javascript
js判断在哪个浏览器打开项目的方法
Jan 21 Javascript
如何使用jQuery操作Cookies方法解析
Sep 08 jQuery
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电台频率大全 - 6 辽宁省
2020/03/11 无线电
PHP代码网站如何防范SQL注入漏洞攻击建议分享
2012/03/01 PHP
使用GDB调试PHP代码,解决PHP代码死循环问题
2015/03/02 PHP
php加密解密字符串示例
2016/10/13 PHP
php常用数组函数实例小结
2016/12/29 PHP
PHP获取HTTP body内容的方法
2018/12/31 PHP
jquery 关键字“拖曳搜索”之“拖曳”以及 图片“提示自适应放大”效果 的实现
2010/04/18 Javascript
Javascript实现滚动图片新闻的实例代码
2013/11/27 Javascript
Bootstrap每天必学之缩略图与警示窗
2015/11/29 Javascript
原生js仿jquery一些常用方法(必看篇)
2016/09/20 Javascript
Jquery Easyui自定义下拉框组件使用详解(21)
2020/12/31 Javascript
BootStrapValidator校验方式
2016/12/19 Javascript
js编写简单的聊天室功能
2017/08/17 Javascript
JS实现闭包中的沙箱模式示例
2017/09/07 Javascript
在Vue中使用highCharts绘制3d饼图的方法
2018/02/08 Javascript
通过实例解析javascript Date对象属性及方法
2020/11/04 Javascript
[01:00] DOTA2英雄背景故事第五期之重力引力法则谜团
2020/07/16 DOTA
python实现查找excel里某一列重复数据并且剔除后打印的方法
2015/05/26 Python
Python获取Redis所有Key以及内容的方法
2019/02/19 Python
python getpass模块用法及实例详解
2019/10/07 Python
Django如何使用jwt获取用户信息
2020/04/21 Python
基于python实现简单C/S模式代码实例
2020/09/14 Python
Python reversed反转序列并生成可迭代对象
2020/10/22 Python
HTML5实现预览本地图片
2016/02/17 HTML / CSS
HTML5中的网络存储实现方式
2020/04/28 HTML / CSS
StubHub中国:购买和出售全球活动门票
2020/01/01 全球购物
心理学专业毕业生推荐信范文
2013/11/21 职场文书
临床医师专业个人自我评价
2014/01/08 职场文书
单位承诺书格式
2014/05/21 职场文书
2014年安全生产目标责任书
2014/07/23 职场文书
挂靠协议书
2015/01/27 职场文书
高考作弊检讨书1500字
2015/02/16 职场文书
早会开场白台词大全
2015/06/01 职场文书
暑期社会实践新闻稿
2015/07/17 职场文书
大学生十八大感想
2015/08/11 职场文书
HTML中的表单元素介绍
2022/02/28 HTML / CSS