我正在尝试为给定的图形创建流网络,以便它可以用于测试算法。为了提供清晰度,我希望流入每个顶点的流量等于流出量。所有流量都来自源并进入接收器。每个边缘都有最大容量和方向。我想通过这个网络产生一个流量,它等于最大流量(由最小切割找到),它永远不会超过每个边缘的容量。
下面是我给出的内容以及我想要获得的内容的图形示例。当然" Desired Flow Graph"不是一个独特的例子。我希望这是随机生成的。
我在MatLab中用三个数组表示此图。第一个数组 s 给出"来自"顶点,第二个数组 t 给"到"顶点,第三个数组 w1 给出从 s 到 t 的最大容量。我想生成一个代表流程的随机数组,例如 w2 。 (注意图片中的字母等同于代码中的相应数字,其中" A" = 1。
s = [1 1 1 2 3 3 4 6 5 6];
t = [2 3 4 5 5 6 6 5 7 7];
w1 = [10 15 10 8 5 7 6 5 18 15];
w2 = [8 12 6 8 5 7 6 0 13 13];
任何可以执行此任务的算法的帮助都将非常感激。我希望链接到算法,伪代码,直接代码,甚至只是描述如何实现这样的算法。在此先感谢您的帮助。
答案 0 :(得分:0)
在MATLAB中查看maxflow
函数:
http://www.mathworks.com/help/matlab/ref/graph.maxflow.html
对于您发布的图表,您可以使用以下命令构建有向图:
s = [1 1 1 2 3 3 4 6 5 6];
t = [2 3 4 5 5 6 6 5 7 7];
w1 = [10 15 10 8 5 7 6 5 18 15];
g = digraph(s,t,w1);
然后,您可以使用maxflow
计算节点1和节点7之间的流量值,并将其返回到新的有向图gf
中:
[mf,gf] = maxflow(g,1,7);
您现在引用的w2
向量只包含gf
图的边权重,因此您可以像这样提取它:
w2 = gf.Edges.Weight