利用MATLAB实现Dijkstra算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
利用计算机语言编程实现D算法
一:实验目的
本实验课程主要目的是让学生够熟练掌握图论中的D算法。
二:实验方法
选择MATLAB语言编程实现D算法。
三:实验要求
1.输入必要参数,包括:节点个数、节点间路径长度、给定节点;
2.输出给定节点到其它各节点的最短路径、径长;
3.节点间路径长度用矩阵形式表示。
四:实验内容
无向图共有7个节点,如下图所示。
v1
45
7
计算机输入的节点间路径长度为7×7矩阵:
1234567
1 2 3 4 5 6 7
0123
106
2054
304
5407 6408
780⎡⎤
∞∞∞⎢⎥
∞∞∞∞⎢⎥
⎢⎥∞∞∞⎢⎥∞∞∞∞⎢⎥⎢⎥∞∞∞
⎢⎥∞∞∞
⎢⎥⎢⎥∞∞∞∞
⎣⎦v v v v v v v
v
v
v
v
v
v
v
若
1
v为指定节点,则1v到其它各节点的最短路径及径长的计算机计算结果为:
提示:不相邻的两个节点间∞可以用相对较大的数代替(如输入100表示∞)
五:实验原理
1. D 算法原理
已知图G=(V,E),将其节点集分为两组:置定节点集p G 和未置定节点集
p G G -。其中p G 内的所有置定节点,是指定点s v 到这些节点的路径为最短(即
已完成最短路径的计算)的节点。而p G G -内的节点是未置定节点,即s v 到未置定节点距离是暂时的,随着算法的下一步将进行不断调整,使其成为最短径。在调整各未置定节点的最短径时,是将p G 中的节点作为转接点。具体地说,就是将p G 中的节点作为转接点,计算(s v ,j v )的径长(j p v G G ∈-),若该次计算的径长小于上次的值,则更新径长,否则,径长不变。计算后取其中径长最短者,之后将j v 划归到p G 中。当(p G G -)最终成为空集,同时p G G =,即求得s v 到所有其他节点的最短路径。
j w 表示s v 与其他节点的距离。在p G 中,i w 表示上一次划分到p G 中的节点i
v 到s v 得最短路径。在 p G G -中,表示s v 到j v (j p v G G ∈-)仅经过p G 中的节点作为转接点所求得的该次的最短路径的长度。
如果s v 与j v 不直接相连,且无置定节点作为转接点,则令j w =∞。 2. D 算法实现流程
D 算法流程如下图所示。
六:例题的计算过程
表1 D算法计算过程
v到其他各节点的最短路径和径长
表2
1
七:仿真过程
1. 输入参数:
a. 输入无向图的节点个数
提示:‘Please input number of the notes: k=’
输入:7;
b. 输入对应节点个数的k×k大小的矩阵,并且具有检测能力,如果矩阵大小不匹配,提示重新输入
提示:‘Note: If there is no direct link between notes, use 100 to reprsent infinite Please input the k*k matrix of the length of path: M=’
输入:[0,1,2,3,100,100,100;
1,0,100,100,100,6,100;
2,100,0,100,5,4,100;
3,100,100,0,4,100,100;
100,100,5,4,0,100,7;
100,6,4,100,100,0,8;
100,100,100,100,7,8,0]
若输入错误,提示:‘please input the correct size of the matrix,Please input the k*k matrix of the length of path: M=’
c. 输入起始节点
提示:‘Please identify the initial note: s’
输入:1。
2. 输出结果
a. 输出最短路径矩阵(起始节点为
v)
1
s =
1 1 1 1 1 1 1
0 2 3 4 3 3 3
0 0 0 0 6 5 6
0 0 0 0 0 0 7
c. 输出对应的路径长度(与s顺序对应)
d =
0 1 2 3 6 7 14
3.运行结果截屏