文档帮助中心文档
两个单节点之间的最短路径
P = shortestpath (G s t)
P=最短路径(G,s,t,'Method',algorithm)
[P,d]=最短路径(___)
[P,d,edgepath]=最短路径(___)
实例
P=最短路径(G,s、 t)计算从源节点开始的最短路径s并在目标节点结束T.如果图表是加权的(也就是说,G.边缘包含一个变量重量),然后使用这些权重作为图中沿边的距离。否则,所有的边距离都取为1..
P=最短路径(G,s、 t)
P
G
s、 t
s
T
G.边缘
重量
1.
P=最短路径(G,s、 t","方法",,算法)可选指定用于计算最短路径的算法。例如,如果G那么,这是一个加权图最短路径(G、s、t、‘方法’、‘未加权’)忽略中的边权重G所有边的权值都是1..
P=最短路径(G,s、 t","方法",,算法)
算法
最短路径(G、s、t、‘方法’、‘未加权’)
[P,D) = shortestpath (___)另外返回最短路径的长度,D,使用前面语法中的任何输入参数。
[P,D) = shortestpath (___)
D
[P,D,边缘石) = shortestpath (___)另外,返回边缘索引边缘石中最短路径上的所有边的s来T.
[P,D,边缘石) = shortestpath (___)
边缘石
全部崩溃
创建并绘制有向图。
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 =有向图(s, t);情节(G)
计算节点7和8之间的最短路径。
P=最短路径(G,7,8)
P=1×57 1 3 5 8
创建并绘制带有加权边的图形。
S = [1 1 2 2 6 6 7 7 3 3 9 9 4 4 11 11 8];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 1];图G = (s t重量);情节(G,“EdgeLabel”G.Edges.Weight)
查找节点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 2 2 7 7 9 3 3 1 4 10 8 4 5 6 8];T = [2 3 4 5 7 6 7 5 9 6 6 10 10 10 11 11 8 8 11 9];权重= [1 1 1 1 3 3 2 4 16 2 8 8 9 3 2 10 12 15 16];图G = (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];p =情节(G,“XData”,x,“伊达塔”Y“EdgeLabel”重量);
根据图边权值,求节点6到节点8之间的最短路径。用绿色标出这条路径。
[path1 d] = shortestpath (G 6 8)
路径1=1×58 .你的老板很好
d=14
突出(p path1“EdgeColor”,‘g’)
指定方法像未加权的若要忽略边权重,请将所有边视为其权重为1。此方法会在节点之间生成不同的路径,该路径以前的路径长度过大,无法成为最短路径。以红色突出显示此路径。
方法
未加权的
[path2,d]=最短路径(G,6,8,“方法”,“减重”)
路径2=1×36 9 8
d = 2
突出(p path2“EdgeColor”,“r”)
在多重图中绘制两个节点之间的最短路径,并高亮显示所穿过的特定边。
创建一个带有五个节点的加权多图。几对节点之间有一条以上的边。绘制图表以供参考。
G =图([1 1 1 1 1 2 2 3 3 4 4],[2 2 2 2 3 4 4 5 5 5 2],[2 4 6 8 10 5 3 1 5 6 8 9]);p =情节(G,“EdgeLabel”重量);
查找节点1和节点5之间的最短路径。由于多个节点对之间有多条边,请指定三个输出以最短路径返回最短路径穿过的特定边。
最短路径
[P,d,edgepath]=最短路径(G,1,5)
P=1×51 2 4 3 5
d=11
边缘石=1×41 7 9 10
结果表明,最短路径的总长度为11,并跟随给定的边G.边缘(边缘路径:).
G.边缘(边缘路径:)
ans =4×2表端节点权重uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
通过使用突出与“边缘”名称-值对,用于指定所遍历边的索引。
突出
“边缘”
突出显示(p,“边缘”,edgepath)
使用节点之间的距离作为边权重,查找图中节点之间的最短路径。
创建一个包含10个节点的图。
s=[1 2 3 4 4 5 5 6 7 8 9];t=[2 4 3 5 6 7 6 7 8 9 10];G=图(s,t);
创建x -和y -图形节点的坐标。然后通过指定“XData”和“伊达塔”名称-值对。
“XData”
“伊达塔”
X = [1 2 3 2 2.5 4 3 5 3 5 5];Y = [1 3 4 -1 2 3.5 1 3 0 1.5];情节(G,“XData”,x,“伊达塔”,y)
通过计算图节点之间的欧几里德距离向图中添加边权重。该距离是根据节点坐标计算的 ( x 我 , Y 我 ) 为:
D = | Δ x | 2. + | Δ Y | 2. = | x s - x T | 2. + | Y s - Y T | 2. .
计算 Δ x 和 Δ Y ,首次使用findedges获取向量sn和tn描述图中每条边的源节点和目标节点。然后使用sn和tn索引到x- - -Y-坐标向量并计算 Δ x = x s - x T 和 Δ Y = Y s - Y T 这个函数的函数计算平方和的平方根,因此指定 Δ x 和 Δ Y 作为计算每条边长度的输入参数。
findedges
sn
tn
函数的
(sn, tn) = findedge (G);Dx = x(sn) - x(tn)y(sn) - y(tn);D =函数(dx, dy);
将距离作为边的权值添加到图中,并用标记的边重新绘制图。
G.Edges.Weight = D ';p =情节(G,“XData”,x,“伊达塔”Y“EdgeLabel”重量);
计算节点1和节点10之间的最短路径,并指定两个输出来返回路径长度。对于加权图,最短路径自动使用“积极”考虑边缘权重的方法。
“积极”
[path,len]=最短路径(G,1,10)
路径=1×41 4 9 10
len=6.1503
使用突出函数在绘图中显示路径。
突出显示(p,路径,“EdgeColor”,“r”,“线宽”, 2)
图表
有向图
输入图形,指定为图表或有向图对象。使用图表创建无向图或有向图创建有向图。
例子:G=图(1,2)
G=图(1,2)
例子:G=有向图([12],[23])
G=有向图([12],[23])
源和目标节点ID,指定为节点索引或节点名称的单独参数。
“一个”
“A”
例子:最短路径(G,2,5)计算节点2到节点5之间的最短路径。
最短路径(G,2,5)
例子:最短路径(G,'node1','node2')计算命名节点之间的最短路径节点1和节点2.
最短路径(G,'node1','node2')
节点1
节点2
“自动”
“减重”
“混合”
“非循环的”
最短路径算法,指定为表中的选项之一。
这个“自动”选项自动选择算法:
“减重”用于图表和有向图没有边权的输入。
“积极”用于所有图表具有边权重且要求权重为非负的输入。此选项也用于有向图具有非负权边的输入。
“混合”用于有向图边权值为负值的输入。图不可能有负环。
宽度优先计算,将所有边权重视为1..
要求所有边的权值非负的Dijkstra算法。
有向图的Bellman-Ford算法,它要求图没有负环。
虽然“混合”慢于“积极”对于同样的问题,“混合”更通用,因为它允许一些边的权值为负。
改进带加权边的有向无环图性能的算法。
使用isdag确认一个有向图是否是无圈图。
isdag
笔记
对于大多数图形,“减重”是最快的算法,其次是“非循环的”,“积极”和“混合”.
例子:最短路径(G,s,t,'Method','acyclic')
最短路径(G,s,t,'Method','acyclic')
节点之间的最短路径,作为节点索引向量或节点名称数组返回。P是空的,,{},如果节点之间没有路径。
{}
如果s和T然后,包含数字节点索引P是节点索引的数字向量。
如果s和T包含节点名称,然后P是包含节点名称的单元格数组或字符串数组。
如果存在多条最短路径s和T然后P只包含其中一条路径。返回的路径可能会根据算法而改变方法指定。
最短路径距离,以数字标量返回。D是连续节点之间的边权之和吗P.如果节点之间没有路径,那么D是Inf.
Inf
最短路径上的边,作为边索引向量返回。对于多重图,此输出指示两个节点之间的边位于路径上。此输出与“边缘”名称-值对突出,例如:突出(p,‘边缘’,edgepath).
突出(p,‘边缘’,edgepath)
这个最短路径,最短路径树和距离函数不支持具有负边权的无向图,或者金宝app更普遍地说,任何包含负环的图,原因如下:
最短路径树
距离
A.负周期从节点返回自身的路径,路径上的边权重之和为负。如果两个节点之间的路径上存在负循环,则节点之间不存在最短路径,因为通过遍历负循环总是可以找到较短的路径。
无向图中的单个负边权重创建负循环。
有向图|距离|图表|最近的|最短路径树
最近的
您有这个示例的修改版本。您想打开这个示例与您的编辑吗?
您单击了与此MATLAB命令对应的链接:
通过在MATLAB命令窗口中输入命令来运行命令。Web浏览器不支持MATLAB命令。金宝app
选择一个网站,在那里获得翻译的内容,并看到当地的活动和优惠。根据您的位置,我们建议您选择:.
您还可以从以下列表中选择网站:
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家/地区站点不适合您所在位置的访问。
与当地办事处联系