Matlab shortestpath函数

       shortestpath函数用于求两个单一结点之间的最短路径。不支持负循环。

       负循环:从结点出发回到自身的路径,路径上的边权重之和为负值。如果两个结点之间的路径上具有负循环,则这两个结点之间不存在最短路径,因为始终可以通过负循环找到更短路径。

      无向图中的单个负边权重会创建一个负循环。

       1.P=shortestpath(G,s,t)

用于计算从源结点s处开始到目标结点t处结束的最短路径。如果图进行了加权,则这些权重在图中会标出来。如果没有,所有的权重都视为1。

例:s中第一个结点元素是1,t中第一个结点元素是2,则1->2,构造了一条边。以此类推,构造完整个有向图。

     

 

       2.P=shortestpath(G,s,t,'Method',algorithm)

            用于选择性的指定在计算最短路径时使用的算法。algorithm在下面会具体说明。

            举个栗子,shortestpath(G,s,t,'Method','unweighted')将忽略G中的边权重,所有的权重都视为1.

          例:s中第一个结点元素是1,t中第一个结点元素是2,对应weight中的第一个权重10.则1->2,构造了一条边,边的权重是10。

 

      3.[P,d]=shortestpath( ___ )

            可以使用上述语法中的任何输入参数返回最短路径的长度d.

例:返回最短路径长度d=4.

 

      4.[P,d,edgepath]=shortestpath( ___ )

           可以分会从s(源结点)到t(目标结点)的最短路径上所有边的索引edgepath.

     相关参数的说明:

      1.G   输入图,指定为graph(无向图)或digraph(有向图)对象。

G=graph(1,2)
G=digraph([1,2],[2,3])

     2.s 源节点  t目标结点

     3.algorithm 最短路径算法

        'auto'(默认值),会自动选择算法。

         'unweighted',广度优先计算,将所有边权重都视为1.速度最快。

         'positive' ,Dijkstra算法,要求所有边的权重均为非负数。

          'mixed'(仅适用于有向图),Bellman-Ford算法,要求图没有负循环。'mixed'速度慢 于'positive',但'mixed'更为通用,因为它允许某些边权重为负数。

          'acyclic'(仅适用于有向图), 为了改进加权边的有向无环图(DAG)的性能。使用isdag确认有向图是否无环。

isdag

tf=isdag(G)

//如果G是有向图,则t返回1(true),否则返回0(false)

     4.P  节点之间的最短路径

       以节点索引的向量或节点名称的数组形式返回。如果节点之间没有路径,则p为空,即{}.

       如果s和t包含数值节点索引,则P是结点索引的数值向量。

       如果s和t包含结点名称,则P是包含结点名称的元胞数组或字符串数组。

       如果s和t之间有多条最短路径,则P只包含其中一条路径。返回的路径可能根据Method指定的具体算法而有所不同。

     5.d    最短路径距离    

       如果结点之间没有路径,则d=Inf(无穷大)

     6.edgepath    最短路径上的边

       一般使用highlight(p,'Edges',edgepath)将该边定位高亮。(便于辨识)

参考文献:Matlab帮助文档

  • 27
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值