图论 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(5,6)=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