首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Dijkstra的算法应该返回什么?

Dijkstra的算法应该返回什么?
EN

Stack Overflow用户
提问于 2016-03-05 18:53:37
回答 1查看 3.7K关注 0票数 0

我是一个前端Javascript开发人员,但我想学习一些图论来为谷歌面试做准备,我查阅了Dijkstra算法的一些实现。

这里列出的示例https://github.com/mburst/dijkstras-algorithm/blob/master/dijkstras.js似乎适合于找到两个节点之间的最短路径,并返回两个节点之间的最短节点路径,但维基百科上的伪代码版本似乎同时返回了"prev和dist“--它们应该是什么?

我尝试修改github示例以匹配维基百科伪代码,返回距离似乎给出了来自startVertex的每一个的最短的数字距离。但是prev没有返回最短路径。

代码语言:javascript
运行
AI代码解释
复制
var INFINITY = 1/0;

function PriorityQueue () {
  this._nodes = [];

  this.enqueue = function (priority, key) {
    this._nodes.push({key: key, priority: priority });
    this.sort();
  }
  this.dequeue = function () {
    return this._nodes.shift().key;
  }
  this.sort = function () {
    this._nodes.sort(function (a, b) {
      return a.priority - b.priority;
    });
  }
  this.isEmpty = function () {
    return !this._nodes.length;
  }
}


function Graph(){
  this.vertices = {};

  this.addVertex = function(name, edges){
    edges = edges || null;
    this.vertices[name] = edges;
  }
}


function djikstra(graph, startVertex) {
  var nodes = new PriorityQueue();

  var distances = {};
  var previous = {};

  for(vertex in graph.vertices) {
    if (vertex === startVertex) {
      distances[vertex] = 0;
      nodes.enqueue(0, vertex);
    } else {
      distances[vertex] = INFINITY;
      nodes.enqueue(INFINITY, vertex);
    }

    previous[vertex] = null;
  }


  while(!nodes.isEmpty()) {
    var smallest = nodes.dequeue();

    for(var neighbor in graph.vertices[smallest]) {
      var alt = distances[smallest] + graph.vertices[smallest][neighbor];

      if(alt < distances[neighbor]) {
        distances[neighbor] = alt;
        previous[neighbor] = smallest;
      }
    }
  }

  return distances;
}

var graph = new Graph();

graph.addVertex('S', {V: 1, W: 4});
graph.addVertex('V', {W: 2, T: 6});
graph.addVertex('W', {T: 3});
graph.addVertex('T');


console.log(djikstra(graph, 'S'));
//
{ S: 0, V: 1, W: 3, T: 6 }
EN

回答 1

Stack Overflow用户

发布于 2016-03-05 19:03:29

Dijkstra算法是一种算法,它为一个非负图提供从某个点到所有其他点的最短距离。

有许多不同的修改。您可以返回两个节点之间的距离、节点与所有其他节点之间的距离、距离与路径、距离和前一个节点(这足以构造路径)。

因此,在维基百科的文章中,它返回到所有顶点的距离,以及路径中的前一个顶点是什么以获得路径。

P.S.如果你想为面试做准备,我建议你不要再看随机的github回复(可能真的很难理解某个人的代码,这可能是错误的/次优的),而是打开一本书,试着理解算法背后的逻辑。特别是如果算法可以写成< 50行。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35822554

复制
相关文章
php读取pdf文件_php怎么转换成pdf
Orientation:orientation属性用来设置文档打印格式是“Portrait”还是“Landscape”。 Landscape为横式打印,Portrait为纵向打印
全栈程序员站长
2022/10/04
13.2K0
python 创建PDF文件
ubuntu可以直接 apt-get install python-reportlab
py3study
2020/01/08
1.6K0
Mac 快速创建PDF
一、找到Mac的小机器人打开 屏幕快照 2019-04-23 下午3.14.21.png 二、选择文件夹操作点击选取 屏幕快照 2019-04-23 下午3.16.05.png 三、点击 资源库-->
developerbfl
2019/05/08
1.6K0
Mac 快速创建PDF
动态创建数组[通俗易懂]
使用运算符new也可以创建数组类型的对象,这时需要给出数组的结构说明。用new运算符动态创建一维数组的语法形式为: new 类型名【数组长度】; 其中数组长度指出了数组元素的个数,它可以是任何能够得到正整数值的表达式。 细节: 用new动态创建一维数组时,在方括号后仍然可以加小括号“()”,但小括号内不能带任何参数。是否加“()”的区别在于,不加“()”,则对数组每个元素的初始化,与执行“new T”时所进行初始化的方式相同;加“()”,则与执行“new T()”所进行初始化的方式相同。例如,如果这样动态生成一个整型数组: int *p=new int[10] (); 则可以方便地为动态创建的数组用0值初始化。 如果是用new建立的数组,用delete删除时所在指针名前面要加上“【】”,格式如下: delete[] 指针名;
全栈程序员站长
2022/08/15
3.1K0
动态创建Storyboard
做动画或者做控件的时候不一定都要在xaml里做Storyboard,有时候在代码里动态创建会更加灵活些。 这里以我做的一个改变颜色的Storyboard为例来做说明。(查了不少英文资料,大多都是对beta2的,和release的版本有些不同) 代码: Storyboard storyboard = new Storyboard();             Brush br = xRectangle.Fill;             ColorAnimation colorAnim = new Color
用户1172164
2018/03/01
2.4K0
动态创建Fragment
5.0 在使用fragment的activity里面调用getFragmentManager方法.得到fragmentManager对象
仇诺伊
2018/09/12
2.4K0
动态创建类
1 public class CreateClassHelper 2 { 3 /// <summary> 4 /// 根据列名创建自定义类型 5 /// 属性名称在列名前添加前缀 prdfix 6 /// </summary> 7 /// <param name="columnNames">用来创建属性的列名</param> 8 /// <param name="p
用户6362579
2019/09/29
2.9K0
php格式怎么转换为pdf,PHP如何将将word文件转为pdf
PHP将word文件转为pdf的方法:首先修改【php.ini】,并重启环境;然后安装微软office套件;最后配置office组件服务即可。
全栈程序员站长
2022/08/26
5.5K0
php格式怎么转换为pdf,PHP如何将将word文件转为pdf
Silverlight在线创建PDF(支持中文)
用MS的silverlight来生成Adobe的pdf文档?象不象到肯德基买麦当劳? 哈... 言归正传: 首先要用到下面二个开源库 1.开源项目 http://silverpdf.codeplex.com/ silverlight的pdf开源库 2.FluxJpeg 借助这个可将位图转换化base64字符串,项目官方地址已经找不到了,反正google,baidu一下N多下载 注:社区里总会有一些好心人做善事,愿主保佑他们身体健康,工作顺心,写出更多更好的代码 :) 先看演示:(由于内嵌了一个约7M
菩提树下的杨过
2018/01/23
1.6K0
Angular 动态创建组件
上面代码中,我们定义了一个简单的 AlertComponent 组件,该组件有一个输入属性 type ,用于让用户自定义提示的类型,此外还包含了一个输出属性 output,用于向外部组件输出信息。我们的自定义组件最终是一个实际的 DOM 元素,因此如果我们需要在页面中插入该元素,我们就需要考虑在哪里放置该元素。
阿宝哥
2019/11/05
3.8K0
Swift 动态创建ViewController
class ViewControllerHelper: NSObject { /// 通过ClassName动态创建ViewController /// - Parameter className: calssName /// - Returns: ViewController class func getViewControllerWithCalssName(_ className: String) -> UIViewController {
赵哥窟
2020/07/28
1.9K0
[android] fragment的动态创建
在一个商业软件中,会有很多的界面,如果没一个界面对应一个activity,那么activity会非常的多,清单文件也会非常的乱,谷歌在android3.0以后引入了新的概念叫fragment
唯一Chat
2019/09/10
2.1K0
TypeScript 动态创建类
首先定义一个Greeter的类 class Greeter { greeting: string; constructor(message: string) { this.greeting = message; } greet() { return "Hello, " + this.greeting; } } 根据字符串动态创建Greeter类 //instance creation here var greeter = Object.
陈仁松
2018/04/08
3.8K0
PHP使用mpdf下载PDF文件
官网 https://mpdf.github.io/ 安装 composer require mpdf/mpdf 使用 <?php require_once __DIR__ . '/vendor/a
Action
2021/05/07
3.6K0
PDF Java库: 创建PDF阅读器和编辑器
在当今移动优先的世界中,创建 Android 应用程序是企业和开发人员的必备技能。而且,随着处理 PDF 文档的需求不断增加,使用功能强大的 PDF SDK ComPDFKit 构建 Android PDF 阅读器和编辑器,能使您的最终用户轻松查看和编辑 PDF。
Youna
2023/07/31
4970
PDF Java库: 创建PDF阅读器和编辑器
JAVA动态创建表以及动态插入数据
利用JDBC驱动链接Mysql数据其实很简单的,第一要下载一个名为 “mysql-connector-java-5.1.20-bin.jar” 驱动包。并解压到相应的目录!5.1.20是版 本号到目前为止这个是最新的版本!
ZONGLYN
2019/08/08
6.6K0
Web应用程序如何创建 PDF
在一些场景下,用户都要求一些需要的数据能以 pdf 的格式下载下来。如电子商务商店,经常需要一些报表数据来分析当月的销售情况。
前端小智@大迁世界
2019/07/15
2.9K0
如何创建PDF格式文件,这个方法教你快速创建
很多人接触到的PDF文件,很多都是从网上下载来的,而这些大都是转换来的,因为PDF本身就是比较安全,兼容性比较好,不论是在阅读还是在传输的时候都是比较便捷的,在办公中用到的还是比较多的,但是PDF文件很难进行修改,想要重新创建一个PDF进行编辑该怎么办呢?如何创建PDF格式文件,这是很多人比较关心的问题,今天来给大家分享一个超级好用的方法哦,然给你快速完成创建。
高效办公
2019/05/21
1.6K0
如何创建PDF格式文件,这个方法教你快速创建
PHP实现PDF转换成图片
ImageMagick 是一个图象处理软件,也可以作为PHP的一个扩展来使用。它可以编辑、显示包括JPEG、TIFF、PNM、PNG、GIF和Photo CS在内的绝大多数当今最流行的图象格式。你可以改变图象尺寸、旋转、锐化、减少颜色或加入特殊效果到图象里,并且能够以另一种图象格式保存。
用户8851537
2021/08/19
3K0
通过反射动态创建对象
示🌰 通过Class类的getMethod(String name,Class...parameterTypes)方法取得一个Method对象,并设此方法操作时所需要的参数类型 之后使用Object invoke(Object obj,Object[] args)进行调用,并向方法中传递要设置的obj对象的参数信息 Object对应原方法的返回值,若原方法无返回值,此时返回null 若原方法为静态方法,此时形参Object obj可为null 若原方法形参列表为空,则Object[] args为null
高大北
2022/06/14
9190

相似问题

如何用白色字体使导航栏透明?

10

在UIView中只有白色填充颜色是透明的

11

GraphicksMagic:白色->透明

29

可以将此形状设置为白色边框和透明背景吗?

24

CSS白色透明div

27
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档