[搜索]
题目描述
农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数, 最初,A和B桶都是空的,而C桶是装满牛奶的。有时,农民把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原桶空了。当然每一次灌注都是完全的。由于节约,牛奶不会有丢失。
写一个程序去帮助农民找出当A桶是空的时候,C桶中牛奶所剩量的所有可能性。
输入格式
单独的一行包括三个整数A,B和C。
输出格式
只有一行,升序地列出当A桶是空的时候,C桶牛奶所剩量的所有可能性。
这道题可以用深搜。
分别以A、B、C三个桶内的牛奶量作状态递归(其实也可以只用其中任意两个作状态,因为牛奶的总量已知且不变)。
下一个状态一共有6种情况,分别是:
A->B, A->C, B->A, B->C, C->A, C->B.
设倒出牛奶的桶为P桶,接收牛奶的桶为G桶,那么当满足以下两个条件时就可以从当前状态推到下一个状态:
1.P桶内有牛奶(牛奶量不为零);
2.G桶内的牛奶量小于它的容量。
那么下一个状态中每一个桶内的牛奶又是多少呢?
设P桶的容量是capP,当前的牛奶量是p,G桶的容量是capG,当前的牛奶量是g.
假如P桶内的牛奶倒进G桶后G桶未满(即p