使用宽度优先搜索( BFSBFSBFS )来搜索所有可能的状态。
定义状态结构体( NodeNodeNode ),其中 aaa 和 bbb 分别表示两个水桶中的水量, stepstepstep 表示当前操作步数, sss 表示操作的字符串序 列。
从初始状态开始,进行如下操作:
FILLFILLFILL xxx :将第 xxx 个水桶装满, xxx 为 111 或 222 。
DROPDROPDROP xxx :将第 xxx 个水桶清空, xxx 为 111 或 222 。
POURPOURPOUR xxx yyy :将第 xxx 个水桶的水全部倒入 yyy 桶, xxx 空了或 yyy 满了停止, xxx , yyy 为 111 或 222 。
对于每个操作,更新水桶的状态,将新的状态加入队列。
如果搜索过程中找到了满足目标状态的解,输出最少操作次数和操作过程。否则,输出 impossibleimpossibleimpossible 。