Dijkstra算法与matlab结果解读

图论 Dijkstra算法与matlab结果解读

可以求出图G中从顶点开始到其余各个顶点的最短路。

在这里不列出复杂的数学公式,只对其原理和使用方式做叙述

原理

Dijkstra算法能够求出顶点到其余各个顶点的最短路径。属于贪心算数

1.首先,选取起点,历经顶点周围的所有路径,先找到最短(权重最小)的一条路,当确定了这条后。

2.历经顶点1,顶点2周围的所有路径,找到下一个到原点最短的点(计算以顶点2为中转点,到各个点的距离和从原点直接出发到各个点的距离,选择到顶点最短路)例如:若A—B的距离小于A—C—B,则第三个点选择B边选择A—B

3.现在已经确定两个定点到所选原点的最短路径了,接下来依次执行2,最终得到一条连通树,虽然树上有不同的分支,但树上的每个定点到原点的路仅有一条(即是最短路)

一篇非常好的图文讲解:https://blog.csdn.net/u013414501/article/details/50506907

在这里插入图片描述
上图即求出各个点到原点的最短路径

matlab实现及结果解读

例:
2. 某企业使用一台设备,在每年年初,企业领导部门就要购置新的,还是继续使用旧的。若购置新设备,就要支付一定的购置费用;若继续使用旧设备,则需支付更多的维修费用。现在的问题是如何制定一个几年之内的设备更新计划,使得总的支付被费用最少。以一个五年之内更新某种设备的计划为例,若已知该种设备在各年年初的价格如表1所例,还已知使用不同时间(年)的设备所需要的维修费用用如表2所例。如何制定使得总的支付费用最少的设备更新计划呢?
在这里插入图片描述
首先列出邻接矩阵
在这里插入图片描述

从而将总费用最少的设备更新计划问题,归结为求图G中从v1到v6的最短路径问题,可以使用Dijkstra标号算法求解。



clc;clear

a=zeros(6);%邻接矩阵初始化

a(1[2:6]=[16 22 30 41 61];%输入邻接矩阵,注意这里为有向图

a(2[3:6]=[16 22 30 41];

a(3[4:6]=[ 17 23 31];

a(4[5:6]=[17 23];

a(56=18;

b=sparse(a);%有向图直接变成稀疏矩阵就可以了。

[dist,path]=grapshorttestpah(b,1,6,’Directed’,1)%调用工具箱求最短路

结果

dist = 53
path = 1×3
     1     3     6

结果解读:从节点1到节点的最短路径为1—3—6,最短路程为53

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狗头狗不狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值