文件帮助中心文件
两个单个节点之间的最短路径
P=最短路径(G、s、t)
p = shortestpath(g,s,t,'方法',算法)
[p,d] = shortestpath(___)
[p,d,edgepath] = shortestpath(___)
例子
P.= shortestpath(G那英石)计算从源节点开始的最短路径S.并在目标节点结束T..如果图形已加权(即,G.Edges包含一个变量重量),然后将这些权重用作图形中沿边的距离。否则,所有边距离均视为1.
P.= shortestpath(G那英石)
P.
G
英石
S.
T.
G.Edges
重量
1
P.= shortestpath(G那英石,'方法',算法)可选地指定用于计算最短路径的算法。例如,如果G是一个加权图吗ShortestPath(g,s,t,'方法','unwighted')忽略边缘权重G而是将所有边权重视为1.
P.= shortestpath(G那英石,'方法',算法)
算法
ShortestPath(g,s,t,'方法','unwighted')
[P.那D.]=最短路径(___)另外返回最短路径的长度,D.,使用前面语法中的任何输入参数。
[P.那D.]=最短路径(___)
D.
[P.那D.那边缘]=最短路径(___)另外还返回边索引边缘所有边缘都在最短的路径上S.到T..
[P.那D.那边缘]=最短路径(___)
边缘
全部收缩
创建并绘制有向图。
s=[1 2 3 4 6 6 7 8 7 5];t=[2 3 4 5 5 6 6 1 8 1 3 2 8];G=有向图(s,t);绘图(G)
计算节点7和节点8之间的最短路径。
p = shortestpath(g,7,8)
P =1×57 1 3 5 8
创建和绘制具有加权边缘的图形。
s=[1 1 2 6 7 7 3 3 9 4 4 11 8];t=[2 3 4 6 7 8 8 9 10 5 10 11 12];权重=[10 10 10 10 1 1 1 1 1];G=图形(s,t,权重);绘图(G,'Edgelabel',G.边缘重量)
找到节点3和8之间的最短路径,并指定两个输出以返回路径的长度。
[P,d]=最短路径(G,3,8)
P =1×53 9 5 7 8
d=4
由于图中的中心的边缘具有大的权重,因此节点3和8之间的最短路径围绕边缘权重最小的图形的边界。该路径的总长度为4。
使用自定义节点坐标创建和绘制具有加权边缘的图表。
s=[11 11 2 7 9 3 1 10 8 4 5 6 8];t=[2 3 4 5 7 7 5 9 6 10 11 11 8 11 9];权重=[1 1 1 3 2 4 1 6 2 8 9 3 2 10 12 15 16];G=图形(s、t、权重);x=[0.5-0.5-0.50.51.50-1.5-2];y=[0.50.5-0.5-0.52-0.50];p=曲线图(G,“扩展数据”, x,'ydata', y,'Edgelabel',g.edges.weight);
根据图边权重查找节点6和8之间的最短路径。以绿色突出显示此路径。
[path1,d]=最短路径(G,6,8)
path1 =1×56 3 1 4 8
d = 14
突出显示(p,路径1,'Edgecolor'那“g”)
具体说明方法作为未加权为了忽略边缘权重,而是处理所有边缘,就像它们的重量为1.该方法在节点之间产生不同的路径,先前具有太大的路径长度是最短路径。突出显示红色的这条路径。
方法
未加权
[path2 d] = shortestpath (8 G, 6日,“方法”那“未加权”)
path2 =1×36 9 8.
d=2
突出显示(p,路径2,'Edgecolor'那'r')
绘制多层游戏中的两个节点之间的最短路径,并突出显示遍历的特定边缘。
创建一个有五个节点的加权多重图。几对节点之间有多条边。绘制该图以供参考。
G=图([1 1 1 2 3 3 4 4],[2 2 2 2 3 4 4 5 5 2],[2 4 6 8 10 5 3 1 6 8 9]);p=图(G,'Edgelabel',g.edges.weight);
找到节点1和节点5之间的最短路径。由于其中几对在它们之间具有多个边缘,请指定三个输出最短路径返回最短路径遍历的特定边缘。
最短路径
[P d edgepath] = shortestpath (G, 1, 5)
P =1×51 2 4 3 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)
使用节点之间的距离作为边缘权重找到图形中节点之间的最短路径。
使用10个节点创建图形。
S = [1 1 2 2 3 4 4 5 5 6 6 7 8 9];T = [2 4 3 5 6 5 7 9 6 7 7 8 9 10 10];图G = (s, t);
创造x-和y-图形节点的坐标。然后通过指定使用节点坐标绘制图表“扩展数据”和'ydata'名称-值对。
“扩展数据”
'ydata'
x=[12322.5435];y=[1234-1231.5];曲线图(G,“扩展数据”, x,'ydata', y)
通过计算图节点之间的欧氏距离,为图添加边的权值。距离是从节点坐标计算的 ( X 一世 那 y 一世 ) 作为:
D. = | Δ X | 2 + | Δ y | 2 = | X S. - X T. | 2 + | y S. - y T. | 2 .
算计 Δ X 和 Δ y ,首先使用芬德吉斯获得载体锡和总氮描述图中每个边缘的源和目标节点。然后使用锡和总氮索引到X-及y-坐标向量与计算 Δ X = X S. - X T. 和 Δ y = y S. - y T. .这海波功能计算正方形之和的Squareroot,所以指定 Δ X 和 Δ y 作为输入参数来计算每条边的长度。
芬德吉斯
锡
总氮
海波
[sn,tn]=findedge(G);dx=x(sn)-x(tn);dy=y(sn)-y(tn);D=hypot(dx,dy);
将距离添加到图形中作为边权重,并用标记的边重新打印图形。
G.边缘重量=D';p=曲线图(G,“扩展数据”, x,'ydata', y,'Edgelabel',g.edges.weight);
计算节点1和节点10之间的最短路径,并指定两个输出以同时返回路径长度。对于加权图,最短路径自动使用“肯定的”考虑边缘权重的方法。
“肯定的”
[路径,len] = shortestpath(g,1,10)
路径=1×41 4 9 10
Len = 6.1503.
使用突出函数显示绘图中的路径。
突出(p,路径,'Edgecolor'那'r'那“线宽”,2)
图形
dig
输入图形,指定为图形或dig对象。用图形创建一个无向图形或dig创建定向图形。
例子:图G =(1、2)
图G =(1、2)
例子:G = Digraph([1 2],[2 3])
G = Digraph([1 2],[2 3])
源和目标节点ID,指定为节点索引或节点名称的单独参数。
“A”
“一个”
例子:shortestpath (G, 2、5)计算节点2和节点5之间的最短路径。
shortestpath (G, 2、5)
例子:ShortestPath(g,'node1','node2')计算命名节点之间的最短路径node1.和node2..
ShortestPath(g,'node1','node2')
node1.
node2.
'汽车'
“未加权”
'混合'
“单极”
最短路径算法,指定为表中的选项之一。
这'汽车'选项会自动选择算法:
“未加权”用于图形和dig没有边权重的输入。
“肯定的”用于所有图形有边权的输入,并且要求权值是非负的。这个选项也用于dig具有非负边权重的输入。
'混合'用于dig边权重包含一些负值的输入。图形不能有负循环。
宽度的第一计算,将所有边缘重量视为1.
Dijkstra算法,要求所有边权重均为非负。
有向图的Bellman-Ford算法要求图没有负圈。
而'混合'比这更慢“肯定的”对于同样的问题,'混合'更通用,因为它允许某些边权重为负数。
设计用于改进具有加权边的有向无环图(DAG)性能的算法。
用isdag确认有向图是否是非循环的。
isdag
笔记
对于大多数图表,“未加权”是最快的算法,其次是“单极”那“肯定的”, 和'混合'.
例子:shortestpath (G s t,“方法”,“单极”)
shortestpath (G s t,“方法”,“单极”)
节点之间的最短路径,作为节点索引的向量或节点名称数组。P.是空的,{},如果节点之间没有路径。
{}
如果S.和T.包含数值节点索引,然后P.是节点索引的数字矢量。
如果S.和T.然后包含节点名称P.包含节点名称的单元格数组或字符串数组。
如果之间存在多个最短路径S.和T., 然后P.仅包含其中一个路径。返回的路径可能会因算法而异方法指定。
最短路径距离,作为数字标量返回。D.是中连续节点之间的边权重之和P.。如果节点之间没有路径,则D.是正.
正
最短路径上的边,返回为边索引向量。对于多图,此输出指示路径上两个节点之间的哪条边。该输出与'边缘'名称值对突出,例如:突出显示(p、‘边缘’、边缘路径).
突出显示(p、‘边缘’、边缘路径)
这最短路径那缺点, 和距离函数不支持具有负边权重的无向图,或万博1manbetx者更一般地,不支持包含负循环的任何图,原因如下:
缺点
距离
一种负周期是一条从节点返回到自身的路径,路径上各边的权值之和为负。如果在两个节点之间的路径上存在一个负环,则节点之间不存在最短路径,因为通过遍历负环总能找到更短的路径。
在无向图中,单个负边权值会产生一个负循环。
缺点|距离|最近|图形|dig
最近
您有此示例的修改版本。是否要用您的编辑打开此示例?
您单击了与此MATLAB命令对应的链接:
通过在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。万博1manbetx
选择一个网站以获取可用的翻译内容,并查看本地活动和优惠。根据您的位置,我们建议您选择:.
您还可以从以下列表中选择一个网站:
选择中国网站(以中文或英文)以获取最佳网站性能。其他MathWorks国家网站未优化您的位置。
联系当地办事处