这道题只要你勇敢写就好了(别人都是定义倒牛奶的函数,我却不是QWQ)
状态:每个桶内的牛奶
拓展方法:倒牛奶
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e5+1e4,M=1e3+1e2;
const ll Maxn=0x3ffffff,Minm=-0x3ffffff;
ll x,y,z;
ll visted[30][30][30];//用来标记方案的重复
struct node
{
ll a,b,c;
}que[N];
ll cnt=1;
void bfs()
{
ll tou=0,wei=1;
que[0].a=0;
que[0].b=0;
que[0].c=z;
visted[0][0][z]=true;
while(tou<wei&&cnt<10000)
{
cnt++;
for(ll i=1;i<=6;i++)
{
ll aa,bb,cc;
aa=que[tou].a,bb=que[tou].b,cc=que[tou].c;
if(i==1)
{
if(que[tou].a>=(y-que[tou].b))
{
aa=que[tou].a-(y-que[tou].b);
bb=y;
}
else
{
bb=que[tou].b+que[tou].a;
aa=0;
}
}
if(i==2)
{
if(que[tou].a>=(z-que[tou].c))
{
aa=que[tou].a-(z-que[tou].c);
cc=z;
}
else
{
cc=que[tou].c+que[tou].a;
aa=0;
}
}
if(i==3)
{
if(que[tou].b>=(x-que[tou].a))
{
bb=que[tou].b-(x-que[tou].a);
aa=x;
}
else
{
aa=que[tou].a+que[tou].b;
bb=0;
}
}
if(i==4)
{
if(que[tou].b>=(z-que[tou].c))
{
bb=que[tou].b-(z-que[tou].c);
cc=z;
}
else
{
cc=que[tou].c+que[tou].b;
bb=0;
}
}
if(i==5)
{
if(que[tou].c>=(x-que[tou].a))
{
cc=que[tou].c-(x-que[tou].a);
aa=x;
}
else
{
aa=que[tou].a+que[tou].c;
cc=0;
}
}
if(i==6)
{
if(que[tou].c>=(y-que[tou].b))
{
cc=que[tou].c-(y-que[tou].b);
bb=y;
}
else
{
bb=que[tou].b+que[tou].c;
cc=0;
}
}
if(visted[aa][bb][cc]==true)continue;
visted[aa][bb][cc]=true;
que[wei].a=aa;
que[wei].b=bb;
que[wei].c=cc;
wei++;
}
tou++;
}
ll k[N],cnt=1;
for(ll i=0;i<wei;i++)
{
if(que[i].a==0)
{
k[cnt]=que[i].c;
cnt++;
}
}
sort(k+1,k+cnt);
cout<<k[1]<<" ";
for(ll i=2;i<cnt;i++)
if(k[i]!=k[i-1])
cout<<k[i]<<" ";
}
signed main()
{
cin>>x>>y>>z;
bfs();
}