shortestpathtree
从节点的最短路径树
语法
说明
使用由一个或多个名称-值对组参量指定的其他选项,这些选项使用上述语法中的任意输入参量组合。例如,TR
= shortestpathtree(___,Name,Value
)shortestpathtree(G,s,'OutputForm','vector')
返回用于描述最短路径树的数值向量。
示例
从指定源节点的最短路径
求从一个源节点到图中每个其他可达节点的最短路径,并绘制结果。
创建一个有向图。
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)
G = digraph with properties: Edges: [13x1 table] Nodes: [8x0 table]
计算从节点 1 到图中每个其他可达节点的最短路径。然后,在图上绘制所得到的树。
TR = shortestpathtree(G,1); p = plot(G); highlight(p,TR,'EdgeColor','r')
由于不存在从节点 1 到节点 7 的路径,节点 7 从树中断开连接。
到指定目标节点的最短路径
求从图中每个节点到一个目标节点的最短路径,并绘制结果。
创建并绘制一个图。
s = [1 1 1 1 1 1 1 2 2 7 7 7 7 9 9 3 3 1 6 4 8 10 6 8 4 5]; t = [2 3 4 5 6 8 7 6 7 5 6 8 9 6 8 6 10 10 10 10 10 11 11 11 8 8]; G = graph(s,t); 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]; plot(G,'XData',x,'YData',y)
查找从图中每个节点到节点 10 的最短路径。绘制所得到的树。
TR = shortestpathtree(G,'all',10);
plot(TR)
具有指定源节点的最短路径的子集
求从单一源节点到多个目标节点的最短路径和路径长度。
创建并绘制一个图。
G = digraph(bucky); plot(G)
求从节点 23 到多个其他节点的最短路径。将 OutputForm
指定为 cell
,以元胞数组形式返回最短路径。指定两个输出以同时返回最短路径距离。
target = [1 5 13 32 44]; [TR,D] = shortestpathtree(G,23,target,'OutputForm','cell')
TR=5×1 cell array
{[ 23 22 21 4 5 1]}
{[ 23 22 21 4 5]}
{[23 22 20 16 17 15 14 13]}
{[ 23 22 20 19 18 32]}
{[ 23 24 48 47 46 44]}
D = 1×5
5 4 7 5 5
tree{j}
是从节点 23 到节点 target(j)
的最短路径,长度为 D(j)
。
求从节点 21 到节点 5 的路径和路径长度。
path = TR{2}
path = 1×5
23 22 21 4 5
path_length = D(2)
path_length = 4
输入参数
s
— 源节点
节点索引 | 节点名称 | 'all'
源节点,指定为一个或多个节点索引或节点名称,或者指定为 'all'
表示图中的所有节点。
在单独使用时,
s
必须指定单一源节点。与
t
一起使用时,s
和t
输入必须满足以下条件:s
可以是单个源节点,t
可以指定多个目标节点。s
可以指定多个源节点,t
可以指定单个目标节点。
下表显示通过数值节点索引或节点名称引用一个或多个节点的不同方法。
形式 | 单一节点 | 多个节点 |
---|---|---|
节点索引 | 标量 示例: | 向量 示例: |
节点名称 | 字符向量 示例: | 字符向量元胞数组 示例: |
字符串标量 示例: | 字符串数组 示例: |
s
不得指定节点名称 'all'
,因为此节点名称与选项名称冲突。对于这种情况,请改用 findnode
传入节点索引。
示例: shortestpathtree(G,'a')
示例: shortestpathtree(G,[1 2 3],8)
t
— 目标节点
'all'
(默认) | 节点索引 | 节点名称
目标节点,指定为一个或多个节点索引或节点名称,或者指定为 'all'
表示图中的所有节点。
s
和 t
输入必须满足以下条件:
s
可以是单个源节点,t
可以指定多个目标节点。s
可以指定多个源节点,t
可以指定单个目标节点。
t
不得指定名为 'all'
、'Method'
或 'OutputForm'
的节点,因为这些节点名称与选项名称冲突。对于这些情况,请改用 findnode
传入节点索引。
示例: shortestpathtree(G,[1 2 3],8)
示例: shortestpathtree(G,{'a','b','c'},{'f'})
名称-值参数
将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参量名称,Value
是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: [TR,D] = shortestpathtree(G,s,t,'Method','unweighted','OutputForm','vector')
OutputForm
— 输出的格式
'tree'
(默认) | 'cell'
| 'vector'
输出的格式,指定为逗号分隔的对组,其中包含 'OutputForm'
和下表中的选项之一。
选项 | 描述 |
---|---|
'tree' (默认值) |
|
'cell' |
如果 如果指定,则第三个输出 |
'vector' |
在每种情况下,如果节点 如果指定,则第三个输出 |
示例: shortestpathtree(G,s,'OutputForm','vector')
Method
— 最短路径算法
'auto'
(默认) | 'unweighted'
| 'positive'
| 'mixed'
| 'acyclic'
最短路径算法,指定为逗号分隔的对组,其中包含 'Method'
和下表中的选项之一。
选项 | 描述 |
---|---|
'auto' (默认值) |
|
'unweighted' | 广度优先计算,将所有边权重都视为 |
'positive' | 迪杰斯特拉算法,要求所有边权重均为非负数。 |
'mixed' (仅适用于 digraph ) | 适用于有向图的 Bellman-Ford 算法,要求图没有负循环。 尽管对于相同的问题, |
'acyclic' (仅适用于 digraph ) | 算法旨在改进具有加权边的有向无环图 (DAG) 的性能。 使用 |
注意
对于大多数图,'unweighted'
是速度最快的算法,然后是 'acyclic'
、'positive'
和 'mixed'
。
示例: shortestpath(G,s,t,'Method','acyclic')
输出参量
TR
— 最短路径树
digraph
对象 (默认) | 元胞数组 | 向量
最短路径树,以 digraph
对象、元胞数组或向量形式返回,具体取决于 'OutputForm'
的值。使用 highlight
函数以可视化形式在绘制的图上呈现最短路径树,或使用 plot(TR)
以可视化形式单独呈现最短路径树。
如果两个节点之间有多条最短路径,则 TR
只包含其中一条路径。返回的路径可能根据 Method
指定的具体算法而有所不同。如果没有连接到任何指定节点的路径,则 TR
输出是具有零条边的图。
D
— 源和目标节点之间的距离
向量
源和目标节点之间的距离,以向量形式返回。值 Inf
表示两个节点之间不存在路径。
E
— 树或路径上的边
逻辑向量 (默认) | 元胞数组 | 向量
树或路径上的边,以逻辑向量、元胞数组或向量形式返回,具体取决于 'OutputForm'
的值:
如果不指定
'OutputForm'
或者指定了'tree'
的值,则E
是一个逻辑向量,指示图中的每条边是否在有向图TR
中。此输出与highlight
的'Edges'
名称-值对组兼容,例如:highlight(p,'Edges',E)
。如果
'OutputForm'
为'cell'
,则E
是一个元胞数组,其中包含TR
中对应路径上的边。如果
'OutputForm'
为'vector'
,则E
是一个向量,给出最短路径树中将每个节点连接到父节点的边的索引。
提示
shortestpath
、shortestpathtree
和distances
函数不支持具有负边权重的无向图,或更通俗地说,不支持包含负循环的任何图,原因如下:负循环是从节点出发回到自身的路径,路径上的边权重之和为负值。如果两个节点之间的路径上具有负循环,则这两个节点之间不存在最短路径,因为始终可以通过遍历负循环找到更短路径。
无向图中的单个负边权重会创建一个负循环。
扩展功能
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
版本历史记录
在 R2015b 中推出
另请参阅
shortestpath
| distances
| nearest
| graph
| digraph
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)