/*
倒水问题:
有装满水的6升杯子、空的3升杯子和一升杯子,3个杯子中都没有刻度。在不使用其他道具的情况下,是否可以量出4升的水呢?
输入:
6(满杯水所在的刻度) 3 1
输出:
(6,0,0)->(3,3,0)->(3,2,1)->(4,2,0)
思路:
这与倒可乐是一个问题,关键在与状态的搜索。
1 采用广度优先搜索算法
2 当前状态的下一状态的方法为:(a,b,c)
状态:全部分
*/
/*
关键:
1 小杯子倒向大杯子,只能全部倒入。大杯子倒向小杯子,把大杯子加满。
2 需要使用倾倒函数。量出4升水的方法是:3升杯装中装2升,1升杯0升,6升杯中为4升。
3 如何打印状态,需要在状态中设置访问标记。设置一个父节点指针,到时候逆向打印即可
4 迷宫是无向图,倒水是有向状态图
*/
#include <stdio.h>
#include <stdlib.h>
#include <queue>
#define MAXSIZE 1024
using namespace std;
typedef struct Stat
{
Stat(int a,int b,int c,int d,Stat* s):x(a),y(b),z(c),t(d),par(s){}
int x;//6升杯中容量
int y;//3升杯中容量
int z;//1升杯中容量
int t;//倾倒次数
Stat* par;
//int v;//访问标记,1表示访问
}Stat;
queue<Stat> queueStat;
queue<Stat> printStat;
Stat endStat(0,0,0,0,NULL);
//int iCapA,iCapB,iCapC;//3个容器的容量
void dump(int iConA,int& iVa,int iConB,int& iVb)//A容器中的水倒向B容器中的水
{
if(iVa > iConA || iVb > iConB || iVa &l