首页 > 编程语言 > 详细

通信网实验—Dijkstra算法

时间:2020-11-18 11:45:10      阅读:63      评论:0      收藏:0      [点我收藏+]

实验原理

Dijkstra(狄克斯特拉)算法用于计算通信网中指定节点到其他各节点的最短路径,简称D算法。Dijkstra算法的大致思路是,先把距离初始节点最近的节点找到,加入置定节点集\(\rm{G_p}\),再以这个节 点为基础寻找下一个节点,没找到一个节点都加入到置定节点集中,最终把初始节点到其他各个节点的最短距离依次找出。这里以节点1为初始节点说明:

  • 构建一个距离(dis)列表,存入节点1到其他各个节点的距离。对于节点1不能直接到达的节点,则赋值为一个很大的数(比如999)代替;
  • 从 dis 列表中,我们可以求得一个最小值,即是距离初始节点 1 最近的一个点,我们假设是节点 3。这也是从节点 1 到节点 3 的最短路径,因为无论从初始节点经过别的任何节点再到节点 3 的距离肯定大于这个最小值,这时把节点3存入置定节点集\(\rm{G_p}\);
  • 接下来更新 dis 列表,即比较初始节点 1 到其它各个节点的距离与节点 1 经过节点 3 再到其它节点的距离,保存较小的那一个值存入 dis 列表。再找出新的 dis 列表里面,除了确定点之外的最小的值,即是下一个要确定的点;
  • 依次执行上述步骤,直到每一个点都确定,此时 dis 列表中所存的数据既 是初始节点到其它各个节点的最短距离。

实验仿真

通过Python实现Dijkstra算法的函数Dijkstra (D, begin, end),其中:

  • D为输入的无向图节点间路径长度矩阵;
  • begin为起始节点;
  • end为目标节点。

例题中的无向图有6个节点,如下图所示:
技术分享图片
根据无向图可以得到节点间的距离矩阵可表示为:

\[\left[\begin{array}{cccccc} 0 & 7 & 1 & \infty & \infty & 6 \7 & 0 & 5 & \infty & 6 & \infty \1 & 5 & 0 & 2 & \infty & 10 \\infty & \infty & 2 & 0 & 8 & 9 \\infty & 6 & \infty & 8 & 0 & 5 \6 & \infty & 10 & 9 & 5 & 0 \end{array}\right] \]

假定初始节点为节点1,目标节点为节点5,则最短路径以及径长的仿真结果如下所示:
技术分享图片

通信网实验—Dijkstra算法

原文:https://www.cnblogs.com/MayeZhang/p/13998372.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!