首先注意这是一道 Special Judge题目,方案可能多种,找出一种即可
本来是一道练习BFS的题,由于不会记录方案,就找了别人的思路,惊喜的发现,利用数论方面的知识可以轻松解决:
我们只需要不停地用小桶给大桶里灌水,如果大桶水==N则终止,如果大桶满了就把大桶水倒掉继续。。。。这种方法只用到给出来的步骤中的其中四个。。。。。
至于证明,用到数论里的知识了。。。。。我不得不承认,数论真的很强大!!!唉,我把数论先放过去了没学,回来再看数论吧。。。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define STOP system("pause")
#define fulA 0
#define eptA 1
#define eptB 2
#define AtoB 3
int main()
{
int ca,cb,n;
char s[4][10]={"fill A","empty A","empty B","pour A B"};
int counta,countb;
while(scanf("%d%d%d",&ca,&cb,&n)!=EOF)
{
counta=countb=0;
while(1)
{
if(counta==0)
{
counta=ca;
puts(s[fulA]);
}
puts(s[AtoB]);
if(countb+counta>cb)
{
counta=counta-(cb-countb);
countb=cb;
}
else
{
countb+=counta;
counta=0;
}
if(countb==n)
break;
if(countb==cb)
{
puts(s[eptB]);
countb=0;
}
}
printf("success\n");
}
return 0;
}