问题:现在有三个木桶容量分别为8,5,3升,最初容量为8升的木桶内装满了水,另外两个木桶内为空。三个木桶都没有体积刻度,现在需要将大水桶的8升水等分成两份,每份4升水。列出所有可行的方案。(附不能借助除这三个木桶的其他桶接水)
思路分析:这个问题的思路和农夫过河问题的思路基本类似,只是问题的模型改变了,可以参考另一篇文章求解农夫过河问题
C语言代码:
#include<stdio.h>
#define maxsize 100
typedef struct{ //定义3个木桶组的结构体
int capability[3]; //记录容量
int contain[3]; //记录容积
}group;
int judge(group route[maxsize],int location,group newone) //判断新状态在该路径上是否产生重复
{ //有重复返回1,没有重复返回0
int i;
for(i=0;i<=location;i++)
{
if(route[i].contain[0]==newone.contain[0]&&route[i].contain[1]==newone.contain[1]&&route[i].contain[2]==newone.contain[2])
{
return 1;
}
}
return 0;
}
void print(group route[maxsize],