上一次我们讨论了如何进行图论可视化,这一次我们通过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实现的更多相关文章

  1. 图论-最短路径<Dijkstra,Floyd>

    昨天: 图论-概念与记录图的方法 以上是昨天的Blog,有需要者请先阅读完以上再阅读今天的Blog. 可能今天的有点乱,好好理理,认真看完相信你会懂得 分割线 第二天 引子:昨天我们简单讲了讲图的概念 ...

  2. 第16次CCF CSP认证-第5题-317 号子任务(subtask317)-图论最短路径

    [题目背景]“你在平原上走着走着,突然迎面遇到一堵墙,这墙向上无限高,向下无限深,向左无限远,向右无限远,这墙是什么?”——<流浪地球>原著我们带着地球去流浪了,为了处理流浪过程中可能会发 ...

  3. 图论最短路径算法总结(Bellman-Ford + SPFA + DAGSP + Dijkstra + Floyd-Warshall)

    这里感谢百度文库,百度百科,维基百科,还有算法导论的作者以及他的小伙伴们...... 最短路是现实生活中很常见的一个问题,之前练习了很多BFS的题目,BFS可以暴力解决很多最短路的问题,但是他有一定的 ...

  4. 图论——最短路径 Dijkstra算法、Floyd算法

    1.弗洛伊德算法(Floyd) 弗洛伊算法核心就是三重循环,M [ j ] [ k ] 表示从 j 到 k 的路径,而 i 表示当前 j 到 k 可以借助的点:红色部分表示,如果 j 到 i ,i 到 ...

  5. 图论-最短路径--3、SPFA算法O(kE)

    SPFA算法O(kE) 主要思想是:     初始时将起点加入队列.每次从队列中取出一个元素,并对所有与它相邻的点进行修改,若某个相邻的点修改成功,则将其入队.直到队列为空时算法结束.     这个算 ...

  6. 图论-最短路径 2.Dijkstra算法O (N2)

    2.Dijkstra算法O (N2) 用来计算从一个点到其他所有点的最短路径的算法,是一种单源最短路径算法.也就是说,只能计算起点只有一个的情况. Dijkstra的时间复杂度是O (N2),它不能处 ...

  7. 图论最短路径算法——Dijkstra

    说实在的,这算法很简单,很简单,很简单--因为它是贪心的,而且码量也小,常数比起SPFA也小. 主要思想 先初始化,dis[起点]=0,其它皆为无限大. 还要有一个bz数组,bz[i]表示i是否确定为 ...

  8. [图论]最短路径问题 :Floyed-Warshall

    最短路径问题 目录 最短路径问题 Description Input Output Sample Input Sample Output 解析 了解Floyed算法 Floyed算法的核心思想: 代码 ...

  9. 图论最短路径算法——SPFA

    为了不要让太多人被害,我还是说一下这种算法,它实际上很简单,但被人讲着讲着绕晕了. 主要思想 有人说,SPFA是Bellman-Ford的队列优化.这个算法我也懂了,但是还没试过.我不管是什么算法的优 ...

  10. 图论-最短路径 floyd/dijkstra-Find the City With the Smallest Number of Neighbors at a Threshold Distance

    2020-01-30 22:22:58 问题描述: 问题求解: 解法一:floyd 这个题目一看就是floyd解最合适,因为是要求多源最短路,floyd算法是最合适的,时间复杂度为O(n ^ 3). ...

随机推荐

  1. Jetbrains系列产品最新激活方法[持续更新]

    Jetbrains系列产品最新激活方法[持续更新] 2021.3.4系列激活 方法一: 2021.3.4参考文章: https://www.exception.site/essay/how-to-fr ...

  2. cesium问题-关于不同时间模型亮度不一致问题

    项目中遇到发布的bim模型在当天不同时间的模型亮度发生变化,尤其是晚上的时候会出现模型很暗.尴了个尬,一度怀疑是自己眼睛有问题,连续几天出现同样的情况,想到可能是时间问题导致的模型亮度不同,于是测试了 ...

  3. C语言:send + more = money,单词相加求解字母数字谜问题

    我用的是穷举法,虽然有点笨,但是在想不到其他更好的方法对我而言就是穷举法. 有程序员大大想到其他方法也可以私信我一起探讨一下~ #include<stdio.h> int main() { ...

  4. Python基础篇(流程控制)

    流程控制是程序运行的基础,流程控制决定了程序按照什么样的方式执行. 条件语句 条件语句一般用来判断给定的条件是否成立,根据结果来执行不同的代码,也就是说,有了条件语句,才可以根据不同的情况做不同的事, ...

  5. EDP .Net开发框架--自动化日志

    平台下载地址:https://gitee.com/alwaysinsist/edp 自动化日志不需要额外调用日志相关功能即可无感实现程序集方法调用的日志记录. 创建业务逻辑处理类 public cla ...

  6. java 项目的创建

    新建一个  Spring Initializr

  7. Servlet转发与重定向的资源路径问题解析

    一. 问题引入 转发和重定向可以说是Servlet中最重要的知识点也不为过,因为它决定着整个向Servlet体系中,执行流程的问题.      转发: request.getRequestDispat ...

  8. 微信小程序预约视频号直播

    一.概述 微信小程序提供了可以唤起预约视频号直播弹窗的接口 reserveChannelsLive,该接口接收一个参数 noticeId,通过 getChannelsLiveNoticeInfo 接口 ...

  9. 论elasticsearch在Windows环境的安装

    前置需求 一台电脑(我用的是Windows),有网 第一步:下载并安装 去java官网下载开发版java(考虑到可能有小白,我暂且这么说) java官网下载链接:https://www.oracle. ...

  10. Swift 与 Objc Exception

    一.背景 Swift具备完善的Error handle机制,对于纯Swift下面的Error,在编码的时候能够正确处理. 在使用try? 处理抛出Error的方法的时候,会忽略Error,直接返回ni ...