我需要编写一个程序,以确定在天黑之前有多少孩子可以找到睡觉的床。
每个孩子和每张床都有自己的坐标集(x.x,y.y)。
只有一个孩子适合一张床。
没有两个孩子或床位于同一套坐标上。
每个孩子每分钟步行一步,例如,孩子从22.0,0.0到19.0,0.0步行需要3分钟。
示例:
Child1为22.0,0.0
Child2为0.0,19.0
Bed1为18.0,0.0
Bed2为50.0,14.0
5分钟内会变黑,有多少孩子可以在5分钟内找到床。
我一直在研究最大流量问题,但我认为它不适用于我的问题。
答案 0 :(得分:1)
要解决此问题,您需要实现二分最大匹配(最大流量的特殊情况)算法。首先,您需要根据数据创建图表。将每个孩子连接到每张床上,除非孩子到床的距离大于离开天黑的时间。因为使用最大流量也可以解决二分最大匹配问题,所以我们从该图中制作流网络并用最大流量求解。为此,您应该创建一个容量为source
的{{1}}节点,并将其连接到所有子节点,并创建一个infinity
节点,其容量为sink
,并将每个床连接到它。同时为儿童和床之间的所有边缘指定大小为infinity
的容量。之后,通过在此图表上运行最大流量算法,您将找到答案。