有4个红酒瓶子,它们的容量分别是:9升, 7升, 4升, 2升
开始的状态是 [9,0,0,0],也就是说:第一个瓶子满着,其它的都空着。
允许把酒从一个瓶子倒入另一个瓶子,但只能把一个瓶子倒满或把一个瓶子倒空,不能有中间状态。
这样的一次倒酒动作称为1次操作。
假设瓶子的容量和初始状态不变,对于给定的目标状态,至少需要多少次操作才能实现?
本题就是要求你编程实现最小操作次数的计算。
输入:最终状态(空格分隔)
输出:最小操作次数(如无法实现,则输出-1)
例如:
输入:
9 0 0 0
应该输出:
0
输入:
6 0 0 3
应该输出:
-1
输入:
7 2 0 0
应该输出:
2
思路:这道题目的四个瓶子中的酒量都可以看为状态,比如(9,0,0,0)就是一个状态,求出特定状态的最短路径,很显然用bfs,总体思路还是比较清晰的,这道题最难的地方是在写从一个状态转移到和他相连的另一个状态的业务代码。想了我一个下午还有各种出bug。代码现在有一个小bug,不能找到的状态的要求输出-1,这一点我实在是不知道怎么做。
#include<iostream>
#include<queue>
#include<stdio.h>
using namespace std;
int captain[]={
9,7,4,2};
int des[4