时间限制: 1 Sec 内存限制: 128 MB
提交: 18 解决: 12
[状态] [提交] [命题人:admin]
题目描述
输入
4
输出
3
样例输入 Copy
4
样例输出 Copy
3
来源/分类
#include <iostream>
#include <queue>
#include <set>
using namespace std;
set<int>st;
int full[]={0,3,7,10};
struct Glass{
int cupa,cupb,cupc;
int step;
};
queue<Glass>qu;
int endd;
void bfs()
{
while(!qu.empty())
{
Glass cur=qu.front();
if(cur.cupc==endd)
{
cout<<cur.step;
return;
}
qu.pop();
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(i!=j)
{
int t[4];
t[1]=cur.cupa;
t[2]=cur.cupb;
t[3]=cur.cupc;
if(t[i]!=0&&t[j]!=full[j])
{
if(t[i]>full[j]-t[j])
{
t[i]-=full[j]-t[j];
t[j]=full[j];
}
else
{
t[j]+=t[i];
t[i]=0;
}
Glass son;
son.cupa=t[1];
son.cupb=t[2];
son.cupc=t[3];
son.step=cur.step+1;
if(!st.count(son.cupa*100+son.cupb*10+son.cupc))
{
st.insert(son.cupa*100+son.cupb*10+son.cupc);
qu.push(son);
}
}
}
}
}
}
}
int main() {
Glass start;
cin>>endd;
start.cupa=0;
start.cupb=0;
start.cupc=10;
st.insert(start.cupa*100+start.cupb*10+start.cupc);
qu.push(start);
bfs();
return 0;
}