主要内容

距离

所有节点对的最短路径距离

描述

例子

d=距离(G返回矩阵,d, 在哪里D(i,j)是节点之间最短路径的长度一世和节点j。如果图是加权的(也就是说G.Edges包含一个变量重量),然后将这些权重用作沿图中边缘的距离。否则,所有边缘距离都被视为1

例子

d=距离(G,,,,s将源节点限制为定义的节点s,这样D(i,j)是距节点的距离S(i)到节点j

例子

d=距离(G,,,,s,,,,t另外,将目标节点限制为定义的节点t,这样D(i,j)是距节点的距离S(i)到节点t(j)

例子

d=距离(___,'方法',算法可选地指定用于使用先前语法中任何输入参数计算最短路径的算法。例如,如果G是一个加权图,然后距离(G,“方法”,“未加权”)忽略边缘的重量G而是将所有边缘重量视为1

例子

全部收缩

创建并绘制图形。

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

图包含一个轴对象。轴对象包含类型图形图的对象。

计算图中所有节点对之间的最短路径距离。由于图边缘没有权重,因此所有边缘距离为1。

d =距离(g)
d =10×100 1 1 1 2 3 3 3 4 5 1 0 2 2 1 2 2 2 3 4 1 2 0 2 3 4 4 4 5 6 1 2 2 0 3 4 4 4 5 6 2 1 3 3 0 1 1 1 2 33 2 4 4 4 1 0 2 2 3 4 3 2 4 4 1 2 0 2 3 4 3 2 4 4 1 2 2 2 0 1 2 4 3 5 5 2 3 3 3 3 1 0 1 5 4 6 6 3 4 4 2 1 0

d是对称的,因为G是一个无方向的图。一般来说D(i,j)是节点之间最短路径的长度一世和节点j,对于无方向的图,这等同于D(j,i)

例如,找到节点1和节点10之间的最短路径的长度。

D(1,10)
ANS = 5

创建并绘制图形。

s = [1 1 1 1 2 2 3 4 4 5 6];t = [2 3 4 5 3 6 6 5 7 7 7];G =图(S,T);图(g)

图包含一个轴对象。轴对象包含类型图形图的对象。

找到距节点1,节点2和节点3的最短路径距离到图中所有其他节点的距离。

d =距离(g,[1 2 3])
d =3×70 1 1 1 1 2 2 1 0 1 2 2 1 2 1 1 1 0 2 2 1 2

采用d找到从节点1到节点7的最短路径距离。

D(1,7)
ANS = 2

创建并绘制图形。

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

图包含一个轴对象。轴对象包含类型图形图的对象。

找到从节点5和7到节点2和3的最短路径距离。

来源= [5 7];目标= [2 3];d =距离(g,源,目标)
d =2×23 1 4 2

采用d要找到节点7和节点3之间的最短路径距离,在这种情况下,D(i,j)是距节点的距离来源(i)到节点目标(J)

D(2,2)
ANS = 2

创建并绘制具有加权边缘的有向图。

s = [1 1 1 2 5 3 6 4 7 8 8 8];t = [2 3 4 5 3 6 4 7 2 6 7 5];权重= [100 10 10 10 10 10 10 10 30 50 10 70 10];g = digraph(s,t,weights);情节(g,'Edgelabel',g.edges.

图包含一个轴对象。轴对象包含类型图形图的对象。

找到所有的图节点对之间的最短路径距离。

d =距离(g)
d =8×80 90 10 10 100 30 40 INF 0 20 50 10 40 80 INF 110 0 30 120 20 60 INF 80 100 0 90 120 30 INF 120 10 40 0 30 70 INF 90 110 110 10 10 10 10 10 10 10 10 0 40 INF INF 5070 100 60 90 0 INF 100 20 20 10 10 50 0

自从G是一个定向图,d不是对称的,D(i,j)对应于节点之间的距离一世j。这infd对应于无法到达的节点。例如,由于节点1没有前任,因此无法从图中的任何其他节点达到节点1。所以第一列d包含许多inf反映节点1的值是无法到达的。

默认情况下,距离使用边缘权重计算距离。指定'方法'作为“未加权”忽略边缘的重量并将所有边缘距离视为1。

d1 =距离(g,'方法',,,,“未加权”
D1 =8×80 1 1 1 1 2 2 2 INF 0 2 4 1 3 5 INF 4 0 2 5 1 3 INF 2 4 0 3 5 1 INF 5 1 3 0 2 4 INF 3 5 1 4 0 2 INF 1 INF 1 INF 13 5 2 4 0 INF 2 2 2 1 1 1 0

输入参数

全部收缩

输入图,指定为图形或者Digraph目的。采用图形创建一个无向图或Digraph创建有向图。

例子:G =图(1,2)

例子:g = digraph([1 2],[2 3])

源节点,指定为一个或多个节点索引或节点名称,或'全部'选择所有源节点。

该表显示了通过其数字节点索引或通过其节点名称引用一个或多个节点的不同方法。

形式 单节点 多个节点
节点索引

标量

例子:1

向量

例子:[1 2 3]

节点名称

角色向量

例子:'一种'

字符向量的单元格数

例子:{'a''b''c'}

字符串标量

例子:“一种”

字符串数组

例子:[“ a”“ b”“ c”]

st不得指定名称的节点'全部'或者'方法',因为这些节点名称与选项名称相冲突。采用FindNode相反,这些情况传递节点索引。

例子:距离(G,[1 2])

例子:距离(g,'all',[1 3 5])

目标节点,指定为一个或多个节点索引或节点名称,或'全部'选择所有目标节点。

st不得指定名称的节点'全部'或者'方法',因为这些节点名称与选项名称相冲突。采用FindNode相反,这些情况传递节点索引。

例子:距离(G,[1 2])

例子:距离(g,'all',[1 3 5])

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

选项 描述
'汽车'(默认)

'汽车'选项自动选择算法:

  • “未加权”是用来图形Digraph没有边缘权重的输入。

  • '积极的'用于所有人图形具有边缘权重的输入,需要权重。此选项也用于Digraph具有非负边缘的输入。

  • “混合”是用来Digraph边缘权重的输入包含一些负值。该图不能具有负周期。

“未加权”

广度优先的计算将所有边缘重量视为1

'积极的'

Dijkstra算法要求所有边缘权重。

“混合”(只为Digraph

针对有向图的Bellman-Ford算法,该算法需要该图没有负周期。

尽管“混合”比慢'积极的'对于同样的问题,“混合”更具用途,因为它允许某些边缘重量为负。

笔记

对于大多数图,“未加权”是最快的算法,其次是'积极的', 和“混合”

例子:距离(g,s,t,“方法”,“未加权”)

输出参数

全部收缩

节点对之间的最短路径距离,返回为矩阵。的大小dIS(#源节点)-by-(#目标节点)。一个值inf表示不存在的路径。

尖端

  • 最短路径,,,,矮人, 和距离由于以下原因金宝app

    • 一种负周期是一条从节点回到自身的路径,路径上的边缘权重的总和为负。如果一个负循环在两个节点之间的路径上,则节点之间不存在最短路径,因为始终可以通过穿越负循环来找到较短的路径。

    • 无向图中的单个负边缘重量会产生负周期。

版本历史记录

在R2015B中引入