您的位置:首页 > 其它

POJ3414 Pots【倒水问题+BFS】

2018-03-21 23:43 351 查看
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<ctype.h>
#include<stack>
#include<math.h>
#include <string>
#include<algorithm>
using namespace std;
typedef unsigned long long ULL;

const int MAXN = 100;

int a, b, c;
bool notvist[MAXN+1][MAXN+1];

struct node {
int a, b, level;
int path[MAXN+1];
int plen;
};

string path[] = {
"FILL(1)"
,"FILL(2)"
,"DROP(1)"
,"DROP(2)"
,"POUR(1,2)"
,"POUR(2,1)"
};

void print(int l,int p[],int n)
{
cout<<l<<endl;
for(int i=0;i<n;i++)
cout<<path[p[i]]<<endl;
}

void bfs()
{
queue<node> q;
memset(notvist,true,sizeof(notvist));
node fro;
fro.a=0;
fro.b=0;
fro.level=0;
fro.plen=0;
memset(fro.path,0,sizeof(fro.path));
q.push(fro);
notvist[fro.a][fro.b] = false;
while(!q.empty())
{
fro=q.front();
q.pop();
if(fro.a==c||fro.b==c)
{
print(fro.level,fro.path,fro.plen);
4000

return;
}
node v;
v=fro;
//        cout<<v.b<<" "<<fro.b<<endl;
v.level++;
v.plen++;
if(fro.a<a)
{
v.a=a;
v.b=fro.b;
if(notvist[v.a][v.b])
{
v.path[fro.plen]=0;
q.push(v);
notvist[v.a][v.b]=false;
}
}
//        cout<<v.b<<" "<<fro.b<<endl<<endl;
if(fro.b<b)
{
v.b=b;
v.a=fro.a;
if(notvist[v.a][v.b])
{
v.path[fro.plen]=1;
q.push(v);
notvist[v.a][v.b]=false;
}
}
if(fro.a!=0)
{
v.a=0;
v.b=fro.b;
if(notvist[v.a][v.b])
{
v.path[fro.plen]=2;
q.push(v);
notvist[v.a][v.b]=false;
}
}
if(fro.b!=0)
{
v.b=0;
v.a=fro.a;
if(notvist[v.a][v.b])
{
v.path[fro.plen]=3;
q.push(v);
notvist[v.a][v.b]=false;
}
}
if(fro.a&&(fro.b<b))
{
if(fro.a>(b-fro.b))
{
v.a=fro.a-(b-fro.b);
v.b=b;
}
else
{
v.a=0;
v.b=fro.a+fro.b;
}
if(notvist[v.a][v.b])
{
v.path[fro.plen]=4;
q.push(v);
notvist[v.a][v.b]=false;
}
}
if(fro.b&&(fro.a<a))
{
if(fro.b>(a-fro.a))
{
v.b=fro.b-(a-fro.a);
v.a=a;
}
else
{
v.b=0;
v.a=fro.a+fro.b;
}
if(notvist[v.a][v.b])
{
v.path[fro.plen]=5;
q.push(v);
notvist[v.a][v.b]=false;
}
}
}
cout << "impossible" << endl;
}

int main()
{
ios::sync_with_stdio(false);cin.tie(0);

while(cin>>a>>b>>c)
{
bfs();
}
return 0;
}

/*
1 3 3
S.#
#E#
###
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: