迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。

关于Dijkstra算法是如何工作的,下面我们通过一道例题来说明:

首先以T到所有网络节点的最短路径为例

为了方便计算,避免后期因为人为的疏忽漏算或者算错,我们先把所有的其他点都列出来,像这样:

其中N是指它开始的地方

首先t与自己肯定为0,后选择一个与T连接最短的u;下一步TU,与x未直接相连,距离为infinity,同理得出w也为无穷;
与y直接相连,距离为7.....以此类推,它的规范写法如下:

以此类推,如果你面前有好几条路要走,你一定要选择最短的那一条,这也是贪心算法的由来;

再举个例子:

以tuvw为例:到x的最短距离为3+4;到v的距离最短为4,到y的距离最短为7,规范表达如下:

注意了!数字后面的字母表示的是与目标直接相连再N范围之内的节点!这里容易混淆。

总结一下

本文并没有着重与分析dijkstra算法的原理,而是采用一道经典的例题来剖析,适合于数学基础较低的同学,其中所涉及的图论等数学知识,感兴趣的读者可以自行去了解。

如有问题,欢迎私信或发邮件联系我:flightgyc@qq.com

《计算机网络自顶向下》之重头戏迪杰斯特拉算法相关推荐

  1. 计算机网络课程实验4——编程实现路由算法(迪杰斯特拉算法)

    实验目的: 运用各种编程语言实现基于 Dijkstra 算法的路由软件. 实验意义: 通过本实验,使学生能够对路由原理和路由算法有进一步的理解和掌握. 实验步骤: 1, 选择合适的编程语言编程实现基于 ...

  2. 图论的灵魂——带你走进迪杰斯特拉算法的世界

    你好,我是小黄,一名独角兽企业的Java开发工程师. 感谢茫茫人海中我们能够相遇, 俗话说:当你的才华和能力,不足以支撑你的梦想的时候,请静下心来学习 希望优秀的你可以和我一起学习,一起努力,实现属于 ...

  3. 迪杰斯特拉算法(C语言实现)

    迪杰斯特拉算法(C语言实现) 如上图,求以a为源点到个顶点的最短路劲. #include "stdio.h" #include "stdlib.h" //用一个 ...

  4. C++迪杰斯特拉算法求最短路径

    一:算法历史 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以 ...

  5. 迪杰斯特拉算法——PAT 1003

    本文主要是将我对于我对于迪杰斯特拉算法的理解写出来,同时通过例题来希望能够加深对于算法的理解,其中有错误的地方希望大家指正. 迪杰斯特拉算法 我将这个算法理解成一个局部到整体的算法,这个方法确实越研究 ...

  6. 单源最短路径-Dijkstra(迪杰斯特拉算法)

    迪杰斯特拉算法时间复杂度为O(n^2),其中n为顶点个数. 该算法用于求单源最短路径.并且图中的边不允许带负权值. #include <iostream> using namespace ...

  7. JavaScript实现dijkstra迪杰斯特拉算法(附完整源码)

    JavaScript实现dijkstra迪杰斯特拉算法 PriorityQueue完整源代码 MinHeap.js完整源代码 Heap.js完整源代码 Comparator.js完整源代码 dijks ...

  8. C++实现Dijkstra(迪杰斯特拉)算法(附完整源码)

    C++Dijkstra迪杰斯特拉算法的实现 C++Dijkstra(迪杰斯特拉)算法的完整源码(定义,实现,main函数测试) C++Dijkstra(迪杰斯特拉)算法的完整源码(定义,实现,main ...

  9. C语言实现Dijkstra(迪杰斯特拉)算法(附完整源码)

    Dijkstra迪杰斯特拉 Graph结构体定义 迪杰斯特拉算法完整源码(定义,实现,main函数测试) Graph结构体定义 struct Graph {int vertexNum;int **ed ...

最新文章

  1. CMS之图片管理(3)
  2. Xamarin Essentials教程剪贴板Clipboard
  3. 51单片机串行口c语言编程,51单片机串口通信c语言编程
  4. 我去,还在这样读写 excel 这也太低效了吧,好办法来了
  5. React Hooks 不知道怎么学?看这篇
  6. mysql的压缩包安装_mysql 5.7.24 压缩包安装配置方法图文教程
  7. c语言自由存储区,C/C++ 内存分区以及自由存储区和堆的区别
  8. 大文件数据导出(后台执行,自动生成)
  9. Raphael的set使用
  10. 【java笔记】线程间通信(2):生产者和消费者案例分析
  11. python 函数篇(2)
  12. MAC安装HBase
  13. 网络中常用的各种协议名称(中英文)和具体含义
  14. matlab绘制垂线(x轴或y轴)
  15. 水漆哪个品牌好?十大品牌水漆排行榜
  16. 武汉的二本计算机学校有哪些,武汉二本大学有哪些学校
  17. Java代码走查审查规范总结
  18. PSPACE完全性学习笔记
  19. EN 14339地下消防栓—CE认证
  20. 董事会嫌我行动慢-----鲍尔默流泪回忆退休原因

热门文章

  1. 将Ehcache添加到Openxava应用程序
  2. 使用Spring AspectJ和Maven进行面向方面的编程
  3. arduinopn532模块_树莓派使用libnfc驱动ITEAD NFC PN532模块
  4. JavaScript/JS的学习
  5. HTML特殊符号/特殊字符
  6. xxx钻石商城功能开发需求
  7. 如何优雅地实现判断一个值是否在一个集合中?
  8. 设置数字范围的html语言,JavaScript奇技淫巧44招【实用】
  9. idea如何连接本地mysql_IDEA如何连接MYSQL
  10. 计算机硬盘瓶颈,为何你的电脑卡的飞起,看看是不是遇到存储瓶颈