首页 > 其他分享 >图论最短路径问题与matlab实现

图论最短路径问题与matlab实现

时间:2024-07-01 19:42:53浏览次数:1  
标签:图论 函数 路径 最短 算法 matlab 节点

上一次我们讨论了如何进行图论可视化,这一次我们通过matlab来找出图论中距离最小路径

目录

一、迪杰斯特拉算法(Dijkstra)

迪杰斯特拉算法是由荷兰计算机科学家在1956年发现的算法,此算法使用类似广度优先搜索的方法解决了带权图的单源最短路径问题。它是一个贪心算法。
核心思想:罗列出一个表,其行标题代表着(1)是否经历过(2)距离初始点的距离(3)父节点;列标题则为每个节点的标号
通过不断更新距离和父节点,用贪心算法的思想找到路径最短点
除了迪杰斯特拉算法外,比较著名的找最短路径的方法还有Floyd(弗洛伊德)算法,Bellman‐Ford(贝尔曼‐福特)算法。。
其中,贝尔曼‐福特算法不再将节点区分为是否已访问的状态,因为贝尔曼‐福特模型是利用循环来进行更新权重的,且每循环一次,贝尔曼福特算法都会更新所有的节点的信息。因此,后者解决了迪杰斯特拉算法无法处理但不能处理负权重的问题。
但是他们都解决不了负权回路的图

二、shortestpath函数用法

matlab中提供了上面三种算法的函数包,现在我们来介绍一下这个函数的语法

1.基本语法

2.参数设计

3.应用实例

(1)输入图论信息

信息的输入在上一讲已经详细叙述过,基本思想是将信息用graph函数储存的一个G中。这时G作为一个数据结构,可以用Plot画图,shortestpath寻优

(2)输入参数进行求解

此处,我们需要寻找节点9到节点4的最短路径
[P,d] = shortestpath(G, 9, 4)
得到的P是一个向量,表示节点9到节点4所经历的所有节点
得到的d是一个数,表示从9到4的所经历的距离

(3)最短路径可视化


首先将图赋给一个变量,此时的myplot即为一个包含着图论信息的一个数据结构,之后可以通过对这个数据结构进行处理
之后用Highlight函数对这个变量进行高亮处理(给边加上r红色),P为得到的路径点。而后面的参数则表示对图的边进行红色高亮处理。效果如图所示

三、distances函数————求出任意两点的最短路径矩阵

对于已经储存的图论信息的变量G来说,matlab中的distance函数可以输出其任意两点的最短路径矩阵
用法:D = distances(G)
效果:

另外,我们可以直接通过D(i,j),找到节点i到节点j的距离,他返回值不像矩阵一样返回的是第i行第j列的元素

四、nearest函数————找出给定范围内的所有点

nearest函数可以返回图形 G 中与节点 s 的距离在 d 之内的所有节点
[nodeIDs,dist] = nearest(G, 2, 10)
nodeIDs返回的是与节点2距离小于等于10的所有节点,是一个节点向量
而dist是一个向量,对应着节点2与每一个nodeIDs节点的距离

标签:图论,函数,路径,最短,算法,matlab,节点
From: https://www.cnblogs.com/dlmuwxw/p/18278646

相关文章