Dijkstra算法及其matlab实现

目录

图的概念

图论中的图是由若干给定的点及连接两点的线所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系,用点代表事物,用连接两点的线表示相应两个事物间具有这种关系。
一个图可以用数学语言描述为G(V(G),E(G))。V(vertex)指的是图的顶点集,E(edge)指的是图的边集。一个图可以使用顶点集和边集来描述。

图的分类

图分为有向图和无向图,有向图中的边有起点端和终点端,而无向图没有指向,节点之间只有连接关系。
《Dijkstra算法及其matlab实现》
《Dijkstra算法及其matlab实现》

图的矩阵表示

图的矩阵描述常用的是邻接矩阵法。
在无向图中,邻接矩阵 中的某个元素 cij 有两个取值 0 和 1,当 i 节点和 j 节点相邻连通时取 1,否则取 0。上面的无向图的邻接矩阵可以写成如下的形式,可以发现无向图的邻接矩阵是一个对称矩阵。

C=0111010101110101010101010 C = [ 0 1 1 1 0 1 0 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 ]

在有向图中,邻接矩阵
中的某个元素
c
ij 也有两个取值 0 和 1,当以
i 节点为起点存在指向
j 节点的有向边时取1,否则取 0。上面的有向图的邻接矩阵可以写成如下的形式,可以发现有向图的邻接矩阵一般不是一个对称矩阵。


C=0000010000110001010001010 C = [ 0 1 1 1 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 ]

若把邻接矩阵中的元素1用节点间的距离代替,这时就称这个图为加权图,对应的邻接矩阵为加权邻接矩阵。加权图可以用来计算两个节点之间的最短路等问题。

最短路问题和Dijkstra算法

图中具有最大长度的路称为最长路,包含每个顶点的路称为Hamilton路,两点间距离最短的路称为最短路。
其中,最短路可以使用Dijkstra算法计算。该算法的原理较为直观,相关资料也可以查到,故不再赘述。
在Matlab中有可以计算最短路的函数,先用digraph生成加权图,再用shortestpath计算最短路。
以下Matlab代码可以计算上面有向图中节点 1 到 5 的最短路,path是最短路的路径,distance是最短距离。

a = [1,1,1,2,2,3,4];                    % 起点节点
b = [2,3,4,3,5,4,5];                    % 终点节点
c = [3,2,2,1,3,4,3];                    % 对应权值
g = digraph(a,b,c);                     % 创建图
[path,distance] = shortestpath(g,1,5);  % 计算最短路

另外,可以通过plot(g)绘制图g。

    原文作者:Dijkstra算法
    原文地址: https://blog.csdn.net/u011317780/article/details/82429511
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞