题目描述
两个小孩去打油,一人带了一个一斤的空瓶,另一个带了一个七两、一个三两的空瓶。原计划各打一斤油,可是由于所带的钱不够,只好两人合打了一斤油,在回家的路上,两人想平分这一斤油,可是又没有其它工具,试仅用三个瓶子(一斤、七两、三两)精确地分成两个半斤油来。
算法设计
-
初始状态为(10,0,0),结束状态为(5,5,0);
-
将初始状态节点压入队列;
-
状态出队列,按照不同的分油方法生成子状态,并判断该子状态是否为结束状态:
i. 若是,则程序退出,并打印从初始状态到结束状态的过程;
ii. 若不是,则判断此状态是否出现过,若没有出现过则记录它的父状态并将此节点压入队列,若已经出现过则不做操作; -
返回步骤 c).
程序流程
代码
#include <cstdio>
#include <queue>
#include <stack>
using namespace std;
queue<int> q;
int temp = 0;
int flag[10001] = {
};
void pull_oil(int* in,int* out, int* no, int inp, int outp, int nop)//三个瓶子都尝试一遍倒油过程
{
int tin, tout, temp1;
if(in[1]!=in[0]&&out[1]!=0)//out2in
{
tin = (in[1] + out[1</