主要内容

shortestpath

两个单节点之间的最短路径

描述

例子

P= shortestpath (G,s t)计算从源节点的最短路径年代在目标节点和结束t。如果图加权(即G.Edges包含一个变量重量),那么这些权重作为图中沿边缘的距离。否则,所有边缘的距离了1

例子

P= shortestpath (G,s t“方法”,算法)(可选)指定要使用的算法在计算最短路径。例如,如果G是一个加权图,然后呢shortestpath (G s t,“方法”,“减重”)忽略了边G而不是将所有边的权值1

例子

(P,d)= shortestpath (___)此外返回最短路径的长度,d,使用任何输入参数在以前的语法。

例子

(P,d,edgepath)= shortestpath (___)此外回报指数edgepath所有的边缘上的最短路径年代t

例子

全部折叠

创建和策划一个有向图。

s = [1 1 2 3 3 4 4 6 6 7 8 7 5];t = [4 2 3 4 5 5 6 8 1 3 2 8];G =有向图(s, t);情节(G)

图包含一个坐标轴对象。坐标轴graphplot类型的对象包含一个对象。

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

P = shortestpath (G, 7, 8)
P =1×57 1 3 5 8

创建和情节与加权边缘图。

s = [1 1 1 2 2 6 6 7 8 7 3 3 9 9 4 4 11 11);t = [2 3 4 5 6 7 8 5 8 9 10 5 10 11 12 10 12 12];重量= [10 10 10 10 10 1 1 1 1 1 1 1 1 1 1 1 1 1];图G = (s t重量);情节(G,“EdgeLabel”G.Edges.Weight)

图包含一个坐标轴对象。坐标轴graphplot类型的对象包含一个对象。

找到节点之间的最短路径3和8,并指定两个输出也返回路径的长度。

[P、d] = shortestpath (G, 3, 8)
P =1×53 9 5 7 8
d = 4

自边缘在图像的中心大重量、节点之间的最短路径3和8绕的边界图的边的权值都是最小的。这条道路总长度为4。

创建和加权边缘画一个图,使用自定义节点坐标。

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 6 7 7 5 9 6 6 10 10 10 11 11 8 8 11 9];重量= [1 1 1 1 2 3 3 1 2 4 6 8 8 9 3 2 10 12 15 16);图G = (s t重量);x = [0 0.5 -0.5 -0.5 -1.5 0.5 1.5 0 0 2 2];y = [0 0.5 0.5 -0.5 -0.5 - 2 0 2 0 0 0);p =情节(G,“XData”,x,“YData”,y,“EdgeLabel”,G.Edges.Weight);

图包含一个坐标轴对象。坐标轴graphplot类型的对象包含一个对象。

找到最短路径节点之间基于图6和8边。用绿色突出显示这条道路。

[path1 d] = shortestpath (G 6 8)
path1 =1×56 3 1 4 8
d = 14
突出(p path1“EdgeColor”,‘g’)

图包含一个坐标轴对象。坐标轴graphplot类型的对象包含一个对象。

指定方法作为未加权的忽略了边的权值,而不是把所有边缘,如果他们有一个重量的1所示。这种方法会产生一个不同的节点之间的路径,一个以前太大的路径长度最短路径。突出这条道路为红色。

[path2 d] = shortestpath (8 G, 6日,“方法”,“减重”)
path2 =1×36 9 8
d = 2
突出(p path2“EdgeColor”,“r”)

图包含一个坐标轴对象。坐标轴graphplot类型的对象包含一个对象。

图中两个节点之间的最短路径遍历油印,强调特定的边缘。

创建一个加权多重图有5个节点。几个成对的节点有一个以上的边缘。绘制图供参考。

图G = ([1 1 1 1 1 2 2 3 3 3 4 4], [2 2 2 2 4 2 3 4 5 5 5 2], [2 4 6 8 10 5 3 1 5 6 8 9]);p =情节(G,“EdgeLabel”,G.Edges.Weight);

图包含一个坐标轴对象。坐标轴graphplot类型的对象包含一个对象。

找到5节点1和节点之间的最短路径。以来的几个节点对它们之间有一个以上的边缘,指定三个输出shortestpath返回特定的边缘,最短路径遍历。

[P d edgepath] = shortestpath (G, 1, 5)
P =1×51 2 3 4 5
d = 11
edgepath =1×41 7 9 10

结果表明,最短路径总长度为11和遵循的边缘G.Edges (edgepath:)

G.Edges (edgepath:)
ans =4×2表EndNodes重量________ ________ 1 2 2 2 4 3 3 4 1 3 5 5

强调通过使用这条边路径突出函数与“边缘”名称-值对指定边缘的指数遍历。

突出(p,“边缘”edgepath)

图包含一个坐标轴对象。坐标轴graphplot类型的对象包含一个对象。

找到最短路径图中节点之间使用节点之间的距离作为边的权值。

创建一个与10节点图。

s = [1 1 2 2 3 4 4 4 5 6 5 6 7 8 9];t = [2 3 4 5 6 7 5 7 9 6 7 8 9 10 10];图G = (s, t);

创建x -y -坐标图的节点。然后画出图使用指定的节点坐标“XData”“YData”名称-值对。

2.5 x = [1 2 3 2 4 5 3 5];y = [1 3 4 1 2 1 3 0 3.5 1.5);情节(G,“XData”,x,“YData”,y)

图包含一个坐标轴对象。坐标轴graphplot类型的对象包含一个对象。

边的权值添加到图通过计算节点之间的欧几里得距离图。的距离计算节点坐标 ( x , y ) 为:

d = | Δ x | 2 + | Δ y | 2 = | x 年代 - - - - - - x t | 2 + | y 年代 - - - - - - y t | 2

计算 Δ x Δ y ,第一次使用findedges获取向量sntn描述了源和目标节点图的每条边。然后使用sntn索引到x- - -y坐标向量和计算 Δ x = x 年代 - - - - - - x t Δ y = y 年代 - - - - - - y t 。的函数的函数计算平方和的squareroot,所以指定 Δ x Δ y 作为输入参数来计算每条边的长度。

(sn, tn) = findedge (G);dx = x (sn) - x (tn);dy = y (sn) - y (tn);D =函数(dx, dy);

添加的距离图的边的权值和改建的图边缘标记。

G.Edges。重量=D'; p = plot(G,“XData”,x,“YData”,y,“EdgeLabel”,G.Edges.Weight);

图包含一个坐标轴对象。坐标轴graphplot类型的对象包含一个对象。

计算节点1和节点之间的最短路径10并指定两个输出也返回路径长度。对于加权图,shortestpath自动使用“积极”方法考虑了边。

[路径,len] = shortestpath (G, 1, 10)
路径=1×41 4 9 10
len = 6.1503

使用突出函数显示的路径图。

突出(p,路径,“EdgeColor”,“r”,“线宽”,2)

图包含一个坐标轴对象。坐标轴graphplot类型的对象包含一个对象。

输入参数

全部折叠

输入图,指定为一个有向图对象。使用创建一个无向图有向图创建一个有向图。

例子:图G = (1、2)

例子:2 G =有向图([1],[2 3])

源和目标节点id指定为单独的节点指标或参数节点的名称。

价值 例子
标量节点索引 1
特征向量节点名 “一个”
字符串标量节点名 “一个”

例子:shortestpath (G, 2、5)计算节点2和节点之间的最短路径5。

例子:shortestpath (G, node1, node2)计算指定的节点之间的最短路径node1node2

最短路径算法,表中指定的选项。

选项 描述
“汽车”(默认)

“汽车”选择自动选择算法:

  • “减重”用于有向图输入没有边。

  • “积极”用于所有输入边的权值,并需要非负权重。这个选项也用于有向图输入与非负边的权值。

  • “混合”用于有向图边包含一些负的输入。图不能有负面循环。

“减重”

广度优先对待所有边的权值的计算1

“积极”

迪杰斯特拉算法,要求所有边的权值是负的。

“混合”(仅供有向图)

bellman指示图,需要图形算法没有负面循环。

“混合”是低于“积极”同样的问题,“混合”更通用的,因为它允许一些边是负的。

“单极”(仅供有向图)

算法设计为指导改善性能,非循环图(无进取心的人)和加权边缘。

使用isdag确认如果无环有向图。

请注意

对于大多数图形,“减重”是最快的算法,其次是吗“单极”,“积极”,“混合”

例子:shortestpath (G s t,“方法”,“单极”)

输出参数

全部折叠

节点之间的最短路径,作为一个向量返回节点索引或一组节点的名称。P是空的,{},如果没有节点之间的路径。

  • 如果年代t包含数字节点指标P是一个数值向量的节点指标。

  • 如果年代t包含节点名P是一个单元数组或字符串数组包含节点名称。

如果有多个之间的最短路径年代t,然后P只包含一个路径。返回的路径可以改变这取决于算法方法指定。

最短路径距离,作为数字返回标量。d是连续的节点之间的边的权值的总和P。如果没有节点之间的路径,然后d

边缘最短路径,作为一个向量返回边缘指数。油印,输出显示这两个节点之间的边的路径。这个输出兼容“边缘”名称-值对的突出,例如:突出(p,‘边缘’,edgepath)

提示

  • shortestpath,shortestpathtree,距离功能不支持与负边的无向图,或更一般金宝app的任何包含消极的循环图,由于这些原因:

    • 一个消极的循环是一个路径,从一个节点本身,与路径上的边的权值之和是负的。如果一个消极的周期在两个节点之间的路径,节点之间的最短路径不存在,因为总能找到更短的路径遍历负面循环。

    • 一个负缘体重在一个无向图创建一个负面循环。

版本历史

介绍了R2015b