allpaths
说明
[___] = allpaths(
使用一个或多个名称-值参量指定其他选项。您可以使用上述语法中的任何输出参量组合。例如,您可以指定 G
,s
,t
,Name,Value
)MaxNumPaths
和一个标量来限制返回的路径数。
示例
无向图中的所有路径
为具有四个节点的完整图创建一个邻接矩阵,然后基于该邻接矩阵创建一个无向图。绘制图。
A = ones(4); G = graph(A); plot(G)
计算图中从节点 1 开始到节点 3 结束的所有路径。
paths = allpaths(G,1,3)
paths=5×1 cell array
{[ 1 2 3]}
{[1 2 4 3]}
{[ 1 3]}
{[1 4 2 3]}
{[ 1 4 3]}
沿路径的边
allpaths
的第二个输出参量返回沿每条路径的边。这对于多重图特别有用,多重图需要边索引来唯一识别路径中的边。
创建一个包含 8 个节点和 18 条边的有向多重图。指定节点的名称。绘制一个包含带标签的节点和边的图。
s = [1 1 2 2 3 3 2 2 4 6 8 6 6 7 3 3 5 3]; t = [2 3 1 3 2 1 4 4 6 2 6 7 8 8 5 5 7 7]; names = {'A','B','C','D','E','F','G','H'}; G = digraph(s,t,[],names); p = plot(G,'EdgeLabel',1:numedges(G));
计算节点 A 和节点 H 之间的所有路径。指定两个输出参量以同时返回沿每条路径的边的边索引。
[paths,edgepaths] = allpaths(G,'A','H');
查看沿第一条路径的节点和边。
paths{1}
ans = 1x6 cell
{'A'} {'B'} {'C'} {'E'} {'G'} {'H'}
edgepaths{1}
ans = 1×5
1 4 9 13 17
突出显示沿第一条路径的节点和边。
highlight(p,'Edges',edgepaths{1},'EdgeColor','r','LineWidth',1.5,'NodeColor','r','MarkerSize',6)
限制返回的路径数
使用 'MaxNumPaths'
、'MaxPathLength'
和 'MinPathLength'
选项来限制 allpaths
返回的路径数。
为包含 20 个节点的完整图创建一个邻接矩阵。从该邻接矩阵创建一个无向图,省略自环。
A = ones(20);
G = graph(A,'omitselfloops');
由于图中的所有节点都连接到所有其他节点,图中任意两个节点之间都有大量路径(超过 1.7e16
个)。因此,计算两个节点之间的所有路径是不可行的,因为内存中容纳不下结果。在这种情况下,计算从节点 2 到节点 5 的前 10 条路径。
paths1 = allpaths(G,2,5,'MaxNumPaths',10)
paths1=10×1 cell array
{[ 2 1 3 4 5]}
{[ 2 1 3 4 6 5]}
{[ 2 1 3 4 6 7 5]}
{[ 2 1 3 4 6 7 8 5]}
{[ 2 1 3 4 6 7 8 9 5]}
{[ 2 1 3 4 6 7 8 9 10 5]}
{[ 2 1 3 4 6 7 8 9 10 11 5]}
{[ 2 1 3 4 6 7 8 9 10 11 12 5]}
{[ 2 1 3 4 6 7 8 9 10 11 12 13 5]}
{[2 1 3 4 6 7 8 9 10 11 12 13 14 5]}
现在计算节点 2 和节点 5 之间路径长度小于或等于 2 的前 10 条路径。
paths2 = allpaths(G,2,5,'MaxNumPaths',10,'MaxPathLength',2)
paths2=10×1 cell array
{[ 2 1 5]}
{[ 2 3 5]}
{[ 2 4 5]}
{[ 2 5]}
{[ 2 6 5]}
{[ 2 7 5]}
{[ 2 8 5]}
{[ 2 9 5]}
{[2 10 5]}
{[2 11 5]}
最后,计算节点 2 和节点 5 之间路径长度大于或等于 3 的前 10 条路径。
paths3 = allpaths(G,2,5,'MaxNumPaths',10,'MinPathLength',3)
paths3=10×1 cell array
{[ 2 1 3 4 5]}
{[ 2 1 3 4 6 5]}
{[ 2 1 3 4 6 7 5]}
{[ 2 1 3 4 6 7 8 5]}
{[ 2 1 3 4 6 7 8 9 5]}
{[ 2 1 3 4 6 7 8 9 10 5]}
{[ 2 1 3 4 6 7 8 9 10 11 5]}
{[ 2 1 3 4 6 7 8 9 10 11 12 5]}
{[ 2 1 3 4 6 7 8 9 10 11 12 13 5]}
{[2 1 3 4 6 7 8 9 10 11 12 13 14 5]}
输入参数
s
, t
— 源节点 ID 和目标节点 ID(指定为单独的参量)
节点索引 | 节点名称
源节点 ID 和目标节点 ID,指定为节点索引或节点名称的单独参量。
值 | 示例 |
---|---|
标量节点索引 | 1 |
字符向量节点名称 | 'A' |
字符串标量节点名称 | "A" |
示例: allpaths(G,2,5)
计算节点 2 和节点 5 之间的所有路径。
示例: allpaths(G,'node1','node2')
计算指定节点 node1
和 node2
之间的所有路径。
名称-值参数
将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参量名称,Value
是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: allpaths(G,s,t,'MaxNumPaths',100)
仅返回路径的字典编纂顺序中的前 100 个结果。
MaxNumPaths
— 最大路径数
非负整数标量
最大路径数,指定为包含 'MaxNumPaths'
和非负整数标量的逗号分隔对组。当两个节点之间的路径数量增长到足以达到内存限制时,此选项非常有用。您可以指定 MaxNumPaths
来限制 allpaths
返回的路径数,以便可用内存能够容纳结果。
示例: allpaths(G,s,t,'MaxNumPaths',100)
MaxPathLength
— 最大路径长度
非负整数标量
最大路径长度,指定为包含 'MaxPathLength'
和非负整数标量的逗号分隔对组。此选项过滤由 allpaths
返回的结果,以确保不返回长度大于指定限制的路径。路径的长度按其中的边数来度量,忽略边权重。
要查找某长度范围内的路径,请同时指定 'MaxPathLength'
和 'MinPathLength'
。要查找具有精确指定长度的路径,请为 'MaxPathLength'
和 'MinPathLength'
指定相同的值。
示例: allpaths(G,s,t,'MaxPathLength',4)
返回长度小于或等于 4 的路径。
示例: allpaths(G,s,t,'MinPathLength',3,'MaxPathLength',5)
返回长度为 3、4 或 5 的路径。
MinPathLength
— 最小路径长度
非负整数标量
最小路径长度,指定为包含 'MinPathLength'
和非负整数标量的逗号分隔对组。此选项过滤由 allpaths
返回的结果,以确保不返回长度小于指定限制的路径。路径的长度按其中的边数来度量,忽略边权重。
要查找某长度范围内的路径,请同时指定 'MaxPathLength'
和 'MinPathLength'
。要查找具有精确指定长度的路径,请为 'MaxPathLength'
和 'MinPathLength'
指定相同的值。
示例: allpaths(G,s,t,'MinPathLength',2)
返回长度大于或等于 2 的路径。
示例: allpaths(G,s,t,'MinPathLength',3,'MaxPathLength',5)
返回长度为 3、4 或 5 的路径。
输出参量
paths
— 指定节点之间的路径
元胞数组
指定节点之间的路径,以元胞数组形式返回。每个元素 paths{k}
都包含位于指定源节点和目标节点之间的路径之一上的节点。路径按字典编纂顺序返回。如果源节点和目标节点 s
和 t
指定同一个节点,则按照惯例 allpaths
返回包含该节点的单条路径。如果无法从节点 s
到达节点 t
,则 paths
为空。
paths
中条目的数据类型取决于指定 s
和 t
的方式:
如果将
s
和t
指定为数值节点索引,则每个元素paths{k}
均为节点索引的数值向量。如果将
s
和t
指定为字符串节点名称,则每个元素paths{k}
均为节点名称的字符串数组。如果将
s
和t
指定为字符向量节点名称,则每个元素paths{k}
均为字符向量节点名称的元胞数组。
edgepaths
— 沿每条路径的边
元胞数组
沿每条路径的边,以元胞数组形式返回。每个元素 edgepaths{k}
包含沿对应路径的边的边索引 paths{k}
。如果无法从节点 s
到达节点 t
,则 edgepaths
为空。
详细信息
图路径
图中的路径是一组图边,可以沿这些边从指定的起始节点到达指定的结束节点。按照惯例,沿路径的节点必须唯一,因此路径不包含重复的节点或边。
提示
图中路径的数量很大程度上取决于图的结构。对于某些图结构,路径数可能随着节点数增加而呈指数增长。例如,一个具有由
G = graph(ones(12))
给出的 12 个节点的完整图包含近 1000 万条任意两个节点之间的路径。在这些情况下,使用MaxNumPaths
、MaxPathLength
和MinPathLength
名称-值对组来控制allpaths
的输出。
版本历史记录
在 R2021a 中推出
另请参阅
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)