2

我目前正在研究基于 R 文档中的以下代码的 Ford-Fulkerson 算法:

nodes <- 1:6
arcs <- matrix(c(1,2,1, 1,3,7, 2,3,1, 2,4,3, 2,5,2, 3,5,4, 4,5,1, 4,6,6,
                5,6,2), byrow = TRUE, ncol = 3)
# Maximum flow with Ford-Fulkerson algorithm
maxFlowFordFulkerson(nodes, arcs, source.node = 2, sink.node = 6)

& 得到以下结果:

$`s.cut`
[1] 2 3 1 5

$t.cut
[1] 4 6

$max.flow
[1] 6

结果表明该网络的最大流量为6。

但是,我一直在尝试手动计算最大流量,无论我做什么,我得到的最大流量都只有 5。

这是我能够根据代码示例映射的可能图表: 最大流量图

&我能够得到的一些可能的流程:

2 --> 4 --> 5 --> 6.......[容量:1]

2 --> 5 --> 4 --> 6(回流)...[容量:1]

2 --> 5 --> 6..........................[容量:1]

2 --> 4 --> 6..........................[容量:2]

[总容量:5]

或者

2 --> 3 --> 5 --> 6.......[容量:1]

2 --> 4 --> 5 --> 6.......[容量:1]

2 --> 5 --> 4 --> 6(回流)...[容量:1]

2 --> 4 --> 6.................................[容量:2]

[总容量:5]

我误解了这个过程吗?任何人都可以写下逐步获得最大流量 6 的路径吗?

4

1 回答 1

1

我认为你的是正确的(最大流量应该是5)。也许您可以尝试igraph进行交叉检查,例如,

df <- as.data.frame(`colnames<-`(arcs,c("from","to","capacity")))
g <- graph_from_data_frame(df)
res <- max_flow(g,2,6)

这使

> res
$value
[1] 5

$flow
[1] 0 0 0 3 2 0 0 3 2

$cut
[1] 4 9

$partition1
+ 4/6 vertices, named, from bfc5f42:
[1] 1 2 3 5

$partition2
+ 2/6 vertices, named, from bfc5f42:
[1] 4 6

$stats
$stats$nopush
[1] 4

$stats$norelabel
[1] 3

$stats$nogap
[1] 2

$stats$nogapnodes
[1] 2

$stats$nobfs
[1] 1
于 2020-05-19T22:35:08.580 回答