我在工作中遇到了这个问题。 我正在重新解决问题(从其原始背景),以便更容易理解。
你有几个水桶容量。 你有水壶,只能倒入某些水桶。罐子可以部分地倒空到多个“允许”桶中。
你必须弄清楚是否给出了水壶和水桶的配置,所有的水罐都可以转移到合法水桶而不会溢出。
示例:
说你有水桶A,B& C。 它们分别具有300,400和500个容量。
现在你有3个水壶J1,J2& J3。 他们有300,500和500分别为200单位水。
请注意,此配置可以解决。 一种可能的解决方案配置可能如下所示:
解决此问题的最佳方法是什么?我怀疑这可能是一个已知的算法。一个小小的谷歌搜索让我无处可去。
我现在的暂定解决方案是当我需要将水倒入特定的水桶时,在水桶之间移动水(回溯)。请注意,我还没有完全刷新它。
答案 0 :(得分:4)
这可以视为max flow问题。
为每个水壶和每个水桶创建一个源节点,一个汇聚节点和节点,并从源到每个水壶添加一条边,其容量等于该水壶中的水量。在允许的水桶/水桶对之间添加具有无限容量的边缘,并将每个水桶的边缘添加到水槽节点,其容量等于水桶的容量。
现在找到最大流量。如果它等于水的总量,那么你有一个解决方案。