文件

maxflow.

最大流程

句法

mf = maxflow(g,s,t)
mf = maxflow(g,s,t,算法)
[mf,gf] = maxflow(___
[MF,GF,CS,CT] = maxFlow(___

描述

例子

MF.= maxflow(G英石返回最大流量节点之间S.T.。如果是图形G没有减肥(也就是说,G.Edges.不包含变量重量), 然后maxflow.将所有曲线边缘视为具有等于1的重量。

例子

MF.= maxflow(G英石算法指定要使用的最大流量算法。此语法仅适用于G是一条定向图。

例子

[MF.GF.] = maxflow(___还返回一个定向图形对象,GF.,使用先前语法中的任何输入参数。GF.仅使用边缘形成G具有非零流量值。

例子

[MF.GF.CSCT.] = maxflow(___另外返回源和目标节点ID,CSCT.,代表这一点最低削减与最大流量相关联。

例子

全部收缩

创建并绘制加权图。加权边缘表示流量。

S = [1 1 2 2 3 4 4 4 5 5];T = [2 3 3 4 5 3 5 6 4 6];重量= [0.77 0.44 0.67 0.75 0.89 0.90 2 0.76 1 1];G = Digraph(S,T,重量);绘图(g,'Edgelabel',g.edges.weight,'布局''分层');

确定从节点1到节点6的最大流程。

mf = maxflow(g,1,6)
MF = 1.2100.

创建和绘制图形。加权边缘表示流量。

S = [1 1 2 2 3 3 4];t = [2 3 3 4 4 5 5];重量= [10 6 15 5 10 3 8];G = Digraph(S,T,重量);h = plot(g,'Edgelabel',g.edges.weight);

找到节点1和节点5之间的最大流量值。指定'augmentpath'要使用Ford-Fulkerson算法,并使用两个输出返回非零流的图形。

[MF,GF] = maxFlow(g,1,5,'augmentpath'
MF = 11.
GF =具有属性的数字:边缘:[6x2表]节点:[5x0表]

突出显示并标记非零流的图表。

H.edgeLabel = {};亮点(h,gf,'Edgecolor''r''行宽',2);st = gf.edges.endnodes;LabelEdge(h,st(:,1),st(:,2),gf.edges.weight);

创建并绘制加权图。边缘重量表示流量容量。

s = [1 1 2 3 3 4 4 5 5];t = [2 3 3 2 5 5 6 4 6];重量= [0.77 0.44 0.67 0.69 0.73 2 0.78 1 1];G = Digraph(S,T,重量);绘图(g,'Edgelabel',g.edges.weight,'布局''分层'

找到图形的最大流量和最小剪切。

[MF,〜,CS,CT] = maxflow(g,1,6)
MF = 0.7300.
CS =1 2 3.
ct =4 5 6.

绘制最小切割,使用CS节点作为来源和CT.节点作为下沉。突出显示CS节点是红色和CT.节点为绿色。注意,连接这两组节点的边缘的权重等于最大流量。

h = plot(g,'布局''分层'“来源”,CS,'下沉',CT,......'Edgelabel',g.edges.weight);突出显示(H,CS,'nodecolor''红色的')亮点(H,CT,'nodecolor''绿色'

输入参数

全部收缩

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

例子:g =图(1,2)

例子:G = Digraph([1 2],[2 3])

节点对,指定为标量节点索引或字符向量节点名称的单独参数。

例子:mf = maxflow(g,'a','b')

例子:mf = maxflow(g,1,10)

数据类型:双倍的|char

最大流量算法,指定为表中的条目之一。

笔记

您只能指定非默认算法选项带有定向图形。

选项 描述
'searchtrees'(默认)

使用Boykov-Kolmogorov算法。通过构造与节点相关联的两个搜索树来计算最大流量S.T.

'augmentpath'

使用Ford-Fulkerson算法。通过在剩余定向图中查找增强路径来计算最大流量。

定向图不能在相同的两个节点之间具有相反方向的任何并行边缘,除非这些边的一个的重量为零。因此,如果图表包含边缘[I J],然后它可以包含反向边缘[j i]只有在重量的时候[I J]是零和/或重量[j i]是零。

'pushrelabel'

通过将节点的多余流量推向其邻居然后重新标记节点来计算最大流量。

定向图不能在相同的两个节点之间具有相反方向的任何并行边缘,除非这些边的一个的重量为零。因此,如果图表包含边缘[I J],然后它可以包含反向边缘[j i]只有在重量的时候[I J]是零和/或重量[j i]是零。

例子:mf = maxflow(g,'a','d','augmentpath')

输出参数

全部收缩

最大流量,作为标量返回。

流动的图表,作为a返回dig目的。GF.包含与之相同的节点G,但只包含那些边缘G这是一个非零流。

最小剪切源节点ID,作为标量节点索引,节点指数向量,字符向量节点名称或包含节点名称的字符向量的单元数组。

  • 如果S.T.指定数字节点索引,然后CSCT.还包含节点索引。

  • 如果S.T.指定节点名称,然后指定节点名称CSCT.还包含节点名称。

最小剪切目标节点ID,作为标量节点索引,节点指数向量,字符向量节点名称或包含节点名称的字符向量的单元数组。

  • 如果S.T.指定数字节点索引,然后CSCT.还包含节点索引。

  • 如果S.T.指定节点名称,然后指定节点名称CSCT.还包含节点名称。

更多关于

全部收缩

最大流量

在最大流量的背景下,图中的边缘被认为具有一个容量由边缘重量表示。边缘的容量是可以通过该边缘的流量。因此,图中两个节点之间的最大流动最大化了从源节点的流量的量,S.,到目标节点,T.,基于连接边缘的容量。

最低削减

最小剪切将定向图节点分为两组,CSCT.,使得所有边缘连接的权重的总和CSCT.(切割的重量)最小化。最小切割的重量等于最大流量值,MF.

参赛作品CSCT.表示节点G与节点相关联S.T., 分别。CSCT.满足numel(cs)+ numel(ct)= numnodes(g)

也可以看看

|

在R2015B中介绍

这个主题有用吗?