我需要帮助来理解如何解决以下问题:
亚当教授有两个孩子,不幸的是,他们不喜欢对方。这个问题太严重了,他们不仅拒绝一起走路上学,而且事实上每个人都拒绝走在另一个孩子那天踩过的任何一个街区上。孩子们在拐角处过马路没有问题。幸运的是,教授的房子和学校都在拐角处,但除此之外,教授不确定是否有可能把两个孩子送到同一所学校。教授有一张城镇地图。演示如何制定问题,确定是否两个孩子可以到同一学校作为最大流量问题。
我唯一能想到的就是有一个四角图。左上角的顶点表示源(亚当的房子),右下角的顶点表示汇(学校)右上角的角x表示邻域中的角,y表示邻域的左下角因此,我们有从S -> C1S -> C2C1 -> tC2 -> t的路径。每条路径的权重为1,因为它只能容纳一个子路径。图的最大流是2,这证明了他们可以上同一所学校。
我遇到的问题是,我不确定我得到的这个解决方案是否满足这个问题最让我难堪的是,我不知道这意味着什么:但事实上,每一个人都拒绝走在另一个孩子那天踩过的任何一个街区上。如果两人都住在同一个街区的同一栋房子里,这种说法怎么说得通呢?

最佳答案

更新:结果是,我误读了这个问题。该问题要求找到“边不相交”路径,而不是顶点不相交路径。在这种情况下,解决方案只是将每个角表示为一个顶点,将每个块表示为一个具有容量的边,然后运行规则的最大流(如下面好奇者正确建议的那样)。
我相信OP也有同样的困惑
但事实上,每个人都拒绝走在那天另一个孩子走过的任何街区。如果两人都住在同一个街区的同一栋房子里,这种说法怎么说得通呢?
注意,孩子们住在同一个角落的同一所房子里,而不是同一个街区。
我留下剩下的答案,以防有一天有人真的在寻找顶点不相交的问题:
如果我正确理解这个问题,它要求的是找到从源到汇的两条顶点不相交的路径仅仅按原样使用图,给每个边分配1的容量是不够的。考虑下面的例子:

s -> C1, C1 -> C3, C3 -> C4, C4 -> t
s -> C2, C2 -> C3, C3 -> C5, C5 -> t

如果将容量1分配给这些边,并运行任何最大流算法,它将找到最大流2,但不存在两条顶点不相交路径(两条路径都将通过顶点C3)。
为了解决这个问题,你需要调整你的图表。对于除st之外的每个顶点,将其一分为二。假设顶点u被分成u'u''使所有进入u的边进入u',所有进入u的边进入u''(这些边的容量无关紧要,只要是正的,所以可以将其设置为1)最后,添加一条从u'u''且容量1的边,并在此图上运行max flow。由于我们在分裂节点之间添加了这些边,所以每个顶点最多使用一次,因为要使用顶点,我们需要进入u',从u'u''并从那里退出,只有一个单位的流可以从u'u''

09-11 00:37