有三个容积分别为3升、5升、8升的水桶,其中容积为8升的水桶中装满了水,容积为3升和容积为5升的水桶都是空的。三个水桶都没有刻度,现在需要将大水桶中的8升水等分成两份,每份都是4升水,附加条件是只能这三个水桶,不能借助其他辅助容器。
水桶初始状态:8L水桶装满水,3L和5L的水桶为空。
水桶最终状态:3L水桶为空,5L和8L的水桶各4L水。
假设将每个状态下三个水桶中的水的体积作为status。
从 array(8,0,0 ) -> status = array(4,4,0)
当然还会有一些限制:
1.各个水桶的都有最大值:
0 <= status[0] <= 8;
0 <= status[1] <= 5;
0 <= status[2] <= 3;
2.当前倒水之后各个水桶的状态,与历史倒水之后各个水桶的状态,不能相同。
3.当前水桶为空时,不能倒给其他水桶。
4.当前水桶为最大容积时,其他水桶不能再向这个水桶倒水。
这是一个典形的DFS状态搜索。也可以用BFS实现