| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
我也留个代码,,vector水过,,,,,#include <iostream>
#include <vector>
#include <queue>
using namespace std;
bool v[110][110];
int a,b,c;
struct pot
{
int a,b;
vector<pair<int,int> >vec;//记录路径,,pour(1,2)记为(1,2),drop(1)记为(1,4),fill(1)记为(1,3)
pot(int aa,int bb):a(aa),b(bb){}
};
void output(vector<pair<int,int> >&vec)
{
cout<<vec.size()-1<<endl;
int i;
for(i=1;i<vec.size();i++)
{
if(vec[i].second==3)
cout<<"FILL("<<vec[i].first<<')'<<endl;
else if(vec[i].second==4)
cout<<"DROP("<<vec[i].first<<')'<<endl;
else
cout<<"POUR("<<vec[i].first<<','<<vec[i].second<<')'<<endl;
}
}
int main()
{
cin>>a>>b>>c;
memset(v,false,sizeof(v));
v[0][0]=true;
pot temp(0,0);
temp.vec.push_back(pair<int,int>(0,0));
queue<pot>q;
q.push(temp);
while(!q.empty())
{
temp=q.front();
q.pop();
if(temp.a==c||temp.b==c)
{
output(temp.vec);
return 0;
}
if(!v[temp.a][b])
{
v[temp.a][b]=true;
pot p(temp);
p.b=b;
p.vec.push_back(pair<int,int>(2,3));
q.push(p);
}
if(!v[a][temp.b])
{
v[a][temp.b]=true;
pot p(temp);
p.a=a;
p.vec.push_back(pair<int,int>(1,3));
q.push(p);
}
int aa=temp.a+temp.b,bb=0;
if(aa>a)
{
bb=aa-a;
aa=a;
}
if(!v[aa][bb])
{
v[aa][bb]=true;
pot p(temp);
p.a=aa,p.b=bb;
p.vec.push_back(pair<int,int>(2,1));
q.push(p);
}
aa=0,bb=temp.a+temp.b;
if(bb>b)
{
aa=bb-b;
bb=b;
}
if(!v[aa][bb])
{
v[aa][bb]=true;
pot p(temp);
p.a=aa,p.b=bb;
p.vec.push_back(pair<int,int>(1,2));
q.push(p);
}
if(!v[temp.a][0])
{
v[temp.a][0]=true;
pot p(temp);
p.b=0;
p.vec.push_back(pair<int,int>(2,4));
q.push(p);
}
if(!v[0][temp.b])
{
v[0][temp.b]=true;
pot p(temp);
p.a=0;
p.vec.push_back(pair<int,int>(1,4));
q.push(p);
}
}
cout<<"impossible"<<endl;
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator