图论 Dijkstra算法笔记

 

 先向大佬致敬

图论最短距离(Shortest Path)算法动画演示-Dijkstra(迪杰斯特拉)和Floyd(弗洛伊德)_哔哩哔哩_bilibili

算法原理解释视频,来自清风老师推荐

作业题目

 用matlab对上图重绘得到下图

  

 使用shortestpath函数计算其最短路径,使用默认设置, Dijkstra算法

高亮出最短路径 

 

P =

     1     3     2     5     8

>> d

d =

    12

途径v1→v3→v2→v5→v8

最短路径路程为12

详细代码如下

 

clear;
clc;
s=[1 1 1 3 3 2 5 4 5 6 6 5 7 5 9 9];
t=[4 2 3 2 4 5 4 6 6 5 7 7 8 8 5 8];
w=[1 6 3 2 2 1 6 10 4 10 2 3 4 6 2 3];%%将图转换为有权有向的数字语言
G = digraph(s,t,w);%%绘制有权有向图
%%有权无向图G=graph(s,t,w);当w置1时,即可视为平权/无权
%无向可以视为是特殊的有向,即两点之间有双向等权的通路
plot(G, 'EdgeLabel', G.Edges.Weight, 'linewidth', 2)%%高亮处理

%%去除坐标,将x,y轴置零,set设置的意思
set( gca, 'XTick', [], 'YTick', [] ); 
[P,d] = shortestpath(G, 1, 8);%%求出两点之间的最短路径,d存储的是最短路径长度
%%P存储的是最短路径经过的节点
% 在图中高亮所求最短路径
%首先将图赋给一个变量
myplot = plot(G, 'EdgeLabel', G.Edges.Weight, 'linewidth', 2); 
highlight(myplot, P, 'EdgeColor', 'r')   %对这个变量即我们刚刚绘制的图形
%%进行高亮处理(给边加上r红色)EdgeColor轮廓颜色高亮
% 求出任意两点的最短路径矩阵
D = distances(G);   %该函数matlab2015b之后才可用
D(1,2)  % 从1到2的最短路径
D(9,4)  % 从9 到 4的最短路径
D(5,1)%在此有向途中,5无法到达1,显示inf无穷大

% 找出给定范围内的所有点  nearest(G,s,d)
% 返回图形 G 中与节点 s 的距离在 d 之内的所有节点
[nodeIDs,dist] = nearest(G, 5, 20)  ; %注意:该函数matlab2016a之后可用
%nodeIDs表示d范围内的点,dist表示到该点的距离

 

 

 

 

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值