Algorithm 智能地将水储存在桶中-算法建议?

Algorithm 智能地将水储存在桶中-算法建议?,algorithm,Algorithm,我在工作中遇到了这个问题。 我正在重新思考这个问题(从它的原始上下文),以便更容易理解 你有几个水桶有水的承载能力。 你的水壶只能倒进特定的桶里。罐子可以部分清空到多个“允许”的桶中 您必须了解在给定水罐和水桶配置的情况下,是否可以将所有水罐中的水转移到合法的水桶中而不会溢出 例如: 假设你有水桶A、B和C。 它们的容量分别为300台、400台和500台 现在您有3个罐子J1、J2和J3。 它们分别有300、500和200单位的水 J1可以排空到A和B中 J2可以排空到A、B和C中 J3可以倒进

我在工作中遇到了这个问题。 我正在重新思考这个问题(从它的原始上下文),以便更容易理解

你有几个水桶有水的承载能力。 你的水壶只能倒进特定的桶里。罐子可以部分清空到多个“允许”的桶中

您必须了解在给定水罐和水桶配置的情况下,是否可以将所有水罐中的水转移到合法的水桶中而不会溢出

例如:

假设你有水桶A、B和C。 它们的容量分别为300台、400台和500台

现在您有3个罐子J1、J2和J3。 它们分别有300、500和200单位的水

  • J1可以排空到A和B中
  • J2可以排空到A、B和C中
  • J3可以倒进C
  • 请注意,此配置可以解决。 一种可能的解决方案配置如下所示:

  • A-J1在此完全清空-无法再装满此桶
  • B-J2在此完全清空-无法再装满此桶
  • C-J2中的100个单位和J3中的200个单位使该铲斗能够再装满500-(100+200)=200个单位
  • 解决这个问题的最好办法是什么?我怀疑这可能是一个已知的算法。一点谷歌搜索对我毫无帮助

    我现在的暂定解决方案是,当我需要将水倒入特定的桶中时,在桶之间移动水(回溯)。请注意,我还没有完全冲洗出来

    这可以视为一个问题

    为每个水罐和每个水桶创建一个源节点、一个汇节点和多个节点,并将一条边从源添加到每个水罐,其容量等于该水罐中的水量。在允许的jug/bucket对之间添加容量无限的边,并将每个bucket到sink节点的边添加到容量等于bucket容量的边


    现在找到最大流量。如果它等于水的总量,那么你就有了一个解决方案。

    太棒了!非常感谢:)我想你的意思是说J2可以倒进C。J3可以倒进a,B&C,而不是反过来。@Dukeling:不。你认为我为什么是这个意思?如果需要的话,我可以澄清这个问题。没关系,我想我错过了这一部分-
    “罐子可以部分清空到多个“允许”的桶中。”