维基百科
由于问题指定房子(s)和学校(t)都在街角,我假设街角不算“走过一个街区”,而且问题说他们在街角没有交叉问题,因此例如他们可以一起穿过街道到另一个街区,只要其中一个人走人行道到达另一个街角,另一个人立即穿过街道到达另一个街区。
在这种情况下,流量的限制因素是街区,因此它们必须成为流程图中容量为1的边缘。但是它们连接什么?它们必须连接其他街区。因此,想象一个由9个街区组成的正方形:
1 2 3
4 5 6
7 8 9
在1号街的东南角有一座房子,在5号街的东南角有一所学校。两个孩子都可以穿过街道到达5号街,但只有一个人可以绕着5号街走到对面的学校。另一个人可以直接穿过街道到达4号街,然后到7号街,最后到8号街,在那里可以穿过街道到达5号街拐角处的学校。
所以房子可以到达1、2、4和5号街区。学校可以从5、6、8或9到达。我的第一个想法是将每个街区建模为两个节点,输入和输出,并连接容量为1的边将输入与输出相连。其他节点将通过至少具有2个容量的边相连。您还需要s和t节点。将s连接到1、2、4和5的输入,将5、6、8、9的输出连接到t。然后将街区输出连接到任何角落可以到达的街区的输入上,即1的输出也连接到2、4、5的输入,2、4、5的输出也连接到1的输入。
更简单的思考方式可能是,每个角落都是一个节点,连接着周围方块的输入和输出,并且周围方块的输出与输入相连成为了角落节点。除了连接方块输入和输出的边缘容量为 1,所有边缘都应该至少有容量为 2。这样限制因素就是“走在方块上”。只要最后的流量为 2,他们就可以通过。
因此,让我们简化图表并摆脱我们不使用的方块。一个孩子可以从 s 到 t 绕过 5 号方块,另一个孩子可以穿过街道到达 4 号方块,然后在 a 角处穿过到 8 号方块,沿着 8 号方块走到 t 角,那里就是学校。
s
4 5
a t
8
这里是边缘:
s->4in (capacity 2)
s->5in (capacity 2)
4in->4out (capacity 1) // limiter
5in->5out (capacity 1) // limiter
8in->8out (capacity 1) // limiter
4out->s (capacity 2)
4out->a (capacity 2)
5out->s (capacity 2)
5out->a (capacity 2)
5out->t (capacity 2)
8out->a (capacity 2)
8out->t (capacity 2)
a->4in (capacity 2)
a->5in (capacity 2)
a->8in (capacity 2)
一个孩子的路径 s->5in->5out->t
另一个孩子的路径 s->4in->4out->a->8in->8out->t