初学Dijkstra算法实现节点图最优路线动态显示

1.根据带权邻接矩阵生成无向图(inf表示无穷大)

w=[0,12,inf,inf,inf,16,14;

     12,0,10,inf,inf,7,inf;

     inf,10,0,3,5,6,inf;

     inf,inf,3,0,4,inf,inf;

     inf,inf,5,4,0,2,8;

    16,7,6,inf,2,0,9;

    14,inf,inf,inf,8,9,0];

w(w==inf)=0;%将矩阵中的inf变为0

G=graph(w);%根据带权邻接矩阵生成无向图

plot(G, 'EdgeLabel', G.Edges.Weight, 'linewidth', 2); %画图

输入参数说明:

w:邻接矩阵,存储各顶点之间的距离值,是一个大小为顶点个数的方阵,对角线元素为0

strat:起点编号

finish:终点编号

输出参数说明:

distance:最短路径对应的距离

path:为从start到finish的最短路径

2.算法有效性测试:

计算1点到4点的距离:

在开始计算之前将起点1以外的顶点label均设置为无穷大(即节点1到其他节点的距离为无穷大)

第一列为节点label,第二列为节点1到其他点的距离,第三列为顶点集s

1

0

2

/

3

/

4

/

5

/

6

/

7

/

第一轮迭代开始label(6)=∞)

以1为起点,进行第一轮搜索与1相邻的节点分别有2,6,7。对于1的相邻节点6来说,1的label(1)=0,连接边的代价为16。很明显label(6)>(label(1)+w(1,6)),那么我们就将6的label(6)更新为16,6的父节点更新为1。同样的道理,label(2)更新为12,label(7)更新为14。

1

0

2

12

1

3

4

5

6

16

1

7

14

1

第二轮迭代开始(label(5)=∞)

以6为起点进行搜索,与6相邻的节点分别有3,5。对于6的相邻节点5来说,6的label(6)=16,连接边的代价为2。很明显label(5)>(label(6)+w(6,5)),那么我们就将5的label(5)更新为18,5的父节点更新为6。同样的道理,label(3)更新为22。

1

0

2

12

1

3

22

2

4

5

18

6

6

16

1

7

14

1

第三轮迭代开始(label(4)=∞)

以5为起点进行搜索,与5相邻的节点有4。对于5的相邻节点4来说,5的label(5)=18,连接边的代价为4。很明显label(4)>(label(5)+w(5,4)),那么我们就将4的label(4)更新为22,4的父节点更新为5。

1

0

2

12

1

3

22

2

4

22

5

5

18

6

6

16

1

7

14

1

迭代结束:

按倒序结果推出最短路径path

并输出最短距离Distance

*代码输出效果展示:

需要代码请点击:https://download.csdn.net/download/weixin_44647430/86753167

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值