Day5. 动态规划模型之求两个单一节点之间的最短路径

前言

本章重点学习单一两个点的最短距离。这里用到的是shortestpath函数。

p = shortestpath(G,s,t); %计算从源节点s处开始到目标节点t处结束的最短路径。

输入参数解析:

 G:输入图,指定为graph和digraph对象。

举例:G = graph(1,2)

举例:G = graph([1 2], [2 3])

指定节点之间的最短路径

创建并绘制一个有向图

例子1:

matlab代码:

>> s = [1 1 2 3 3 4 4 6 6 7 8 7 5];
>> t = [2 3 4 4 5 5 6 1 8 1 3 2 8];
>> G = digraph(s,t);
>> plot(G)

运行结果:

 计算节点7和8之间的最短路径

添加代码[p,d] = shortestpath(G,7,8)即可,matlab运行如下:

>>  s = [1 1 2 3 3 4 4 6 6 7 8 7 5];
>>  t = [2 3 4 4 5 5 6 1 8 1 3 2 8];
>> G = digraph(s,t);
>> plot(G);
>> [p,d] = shortestpath(G,7,8)

p =

     7     1     3     5     8


d =

     4

p-节点之间的最短路径,P = 7 1 3 5 8 表示从7到8的最短路径为7-1-3-5-8;

d - 最短路径距离:最短路径距离,以数值标量形式返回。

加权图中的最短路径

创建并绘制一个具有加权边的图

matlab代码运行如下:

>> s = [1 1 1 2 2 6 6 7 7 3 3 9 9 4 4 11 11 8];
>> t = [2 3 4 5 6 7 8 5 8 9 10 5 10 11 12 10 12 12];
>> weights = [10 10 10 10 10 1 1 1 1 1 1 1 1 1 1 1 1 1];
>> G = graph(s,t,weights);
>> plot(G,"Edgelabel",G.Edges.Weight)

返回结果如下:

 求节点3和节点8之间的最短路径,并指定两个输出同时返回该路径的长度。

[p,d] = shortestpath(G,3,8) 跟上述步骤一样。从直观感受上,我们也能找出最短的路径和最短的距离。

 matlab运算如下:

>> s = [1 1 1 2 2 6 6 7 7 3 3 9 9 4 4 11 11 8];
>> t = [2 3 4 5 6 7 8 5 8 9 10 5 10 11 12 10 12 12];
>> weights = [10 10 10 10 10 1 1 1 1 1 1 1 1 1 1 1 1 1];
>> G = graph(s,t,weights);
>> plot(G,"Edgelabel",G.Edges.Weight)
>> [p,d] = shortestpath(G,3,8)

p =

     3     9     5     7     8


d =

     4

忽略边权重的最短路径——最后一部分

使用自定义节点坐标创建并绘制一个具有加权边的图

matlab代码如下:

>> s = [1 1 1 1 1 2 2 7 7 9 3 3 1 4 10 8 4 5 6 8];
>> t = [2 3 4 5 7 6 7 5 9 6 6 10 10 10 11 11 8 8 11 9];
>> weights = [1 1 1 1 3 3 2 4 1 6 2 8 8 9 3 2 10 12 15 16];
>> G = graph(s,t,weights);
>> x = [0 0.5 -0.5 -0.5 0.5 0 1.5 0 2 -1.5 -2];
>> y = [0 0.5 0.5 -0.5 -0.5 2 0 -2 0 0 0];
>> p = plot(G,"XData",x,"YData",y,"Edgelabel",G.Edges.Weight)

运算结果:

根据图边权重,求节点6和8之间的最短路径。以红色突显此路径。

>> [path2,d] = shortestpath(G,6,8);
>> highlight(p,path2,"EdgeColor","r")

将Method指定为unweighted以忽略边权重,转而将所有边的权重都视为1。此方法会在节点之间生成不同的路径,用绿色凸显出来。

>> [path1,d] = shortestpath(G,6,8,"method","unweighted");
>> highlight(p,path2,"EdgeColor","r")

 

 总结

求解两个单点之间的最短路径问题,需要用到shortestpath来进行求解,如果路径有权重问题,学会利用Method和unweighted函数来分析

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值