C++ 如果所有路径长度相同,如何启动Edmonds Karp实现?

C++ 如果所有路径长度相同,如何启动Edmonds Karp实现?,c++,algorithm,network-flow,edmonds-karp,C++,Algorithm,Network Flow,Edmonds Karp,如果所有路径的长度相同,如何为选择起始路径?在这种情况下,最大流量根据路径顺序决定而变化 我认为如何处理顶点的容量存在问题。通常的方法是将顶点v拆分为两个顶点v'和v'',并在v'和v''之间添加一条具有顶点容量的边。连接到v的所有边(即v为目标的边)应与新图形中的v'连接,并且v的所有边应从新图形中的v'开始 您可能知道,当您让流x-a-b-y 3时,会增加反向边的容量。在这种情况下,将添加边a x 3、b a 3、y b 3。如果按照我描述的图形表示,您将看到在第一种情况下可以使用额外的流(

如果所有路径的长度相同,如何为选择起始路径?在这种情况下,最大流量根据路径顺序决定而变化

我认为如何处理顶点的容量存在问题。通常的方法是将顶点v拆分为两个顶点v'和v'',并在v'和v''之间添加一条具有顶点容量的边。连接到v的所有边(即v为目标的边)应与新图形中的v'连接,并且v的所有边应从新图形中的v'开始

您可能知道,当您让流x-a-b-y 3时,会增加反向边的容量。在这种情况下,将添加边a x 3、b a 3、y b 3。如果按照我描述的图形表示,您将看到在第一种情况下可以使用额外的流(我认为它可以通过x-a-d-c-b-y,但尚未检查)

最短路径的选择不应该改变答案——正如我在评论中提到的,我们只在每个步骤上选择最短路径,以避免性能受损的坏情况,但答案总是一样的


希望这个答案有帮助

最大流量变化是什么意思?网络中的最大流量始终具有相同的值。Edmonds Karp选择关于边数的最短路径的唯一原因是为了避免算法性能在速度方面受到严重影响的边情况,不是结果。a b 3 | | | | b y 9 | | | | | x c 10 | | | x a 6 | | | c d 5 | | | | a d 3 | | | c 7 | | d 7 | | a 10 | | | | | | d 6 | | | | | c 8 | | | | b 12 1248 1248 1248 1248 1248 1248 124。最后4行显示节点的容量。x是根,y是目标。如果我使用下面的顺序x-c-d-y5 | | | x-c-b-y3 | | | x-a-d-y1 | | | x-a-b-y3 | | |我得到12。(在每一行中,我发送的流量都是我能发送的最大流量。)然而,如果我按照下面的顺序x-a-b-y 3 | | | | | x-a-d-y 3 | | | x-c-b-y 5 | | | |我总共得到了14条。或者我犯了一个愚蠢的错误,或者如果所有路径的长度都相同,就有一条规则。我知道我应该拆分顶点以处理顶点容量,但我从所有边减去通过的流量容量,而不是添加反向边。因为我没有添加任何反向边,所以没有像x-a-d-c-b-y这样的路径。现在,我明白了。谢谢你的回答。