//2634375 2011-08-20 23:33:36 Accepted 1005 C++ 10 23624 ylwh@Unknown
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <algorithm>
using namespace std;
char s[][10] = {"fill A", "fill B", "pour B A", "pour A B", "empty A", "empty B"};
struct node
{
int a, b, o, next, pre;
}Q[999999];
int map[1001][1001];
int main()
{
int ca, cb, now;
int i ,j, k, n, head, tail;
while( scanf("%d%d%d", &ca, &cb, &n) != EOF )
{
memset(map, 0, sizeof(map));
Q[0].a = ca;
Q[0].b = 0;
Q[0].o = 0;
Q[0].pre = -1;
map[ca][0] = 1;
Q[1].a = 0;
Q[1].b = cb;
Q[1].o = 1;
Q[1].pre = -1;
map[0][cb] = 1;
head = 0;
tail = 2;
while(head < tail)
{
if(Q[head].a != ca)
{
Q[tail].a = ca;
Q[tail].b = Q[head].b;
Q[tail].o = 0;
Q[tail].pre = head;
if(Q[tail].b == n)
break;
if(map[ Q[tail].a ][ Q[tail].b ] == 0)
{
tail++;
map[ Q[tail].a ][ Q[tail].b ] = 1;
}
}
if(Q[head].b != cb)
{
Q[tail].a = Q[head].a;
Q[tail].b = cb;
Q[tail].o = 1;
Q[tail].pre = head;
if(Q[tail].b == n)
break;
if( map[ Q[tail].a ][ Q[tail].b ] == 0 )
{
map[ Q[tail].a ][ Q[tail].b ] = 1;
tail++;
}
}
Q[tail].a = (Q[head].a + Q[head].b) >= ca ? ca : (Q[head].a + Q[head].b);
Q[tail].b = Q[head].b - (Q[tail].a - Q[head].a);
Q[tail].o = 2;
Q[tail].pre = head;
if(Q[tail].b == n)
break;
if( map[ Q[tail].a ][ Q[tail].b ] == 0 )
{
map[ Q[tail].a ][ Q[tail].b ] = 1;
tail++;
}
Q[tail].b = (Q[head].a + Q[head].b) >= cb ? cb : (Q[head].a + Q[head].b);
Q[tail].a = Q[head].a - (Q[tail].b - Q[head].b);
Q[tail].o = 3;
Q[tail].pre = head;
if(Q[tail].b == n)
break;
if( map[ Q[tail].a ][ Q[tail].b ] == 0 )
{
map[ Q[tail].a ][ Q[tail].b ] = 1;
tail++;
}
Q[tail].a = 0;
Q[tail].b = Q[head].b;
Q[tail].o = 4;
Q[tail].pre = head;
if(Q[tail].b == n)
break;
if( map[ Q[tail].a ][ Q[tail].b ] == 0 )
{
map[ Q[tail].a ][ Q[tail].b ] = 1;
tail++;
}
Q[tail].a = Q[head].a;
Q[tail].b = 0;
Q[tail].o = 5;
Q[tail].pre = head;
if( map[ Q[tail].a ][ Q[tail].b ] == 0 )
{
map[ Q[tail].a ][ Q[tail].b ] = 1;
tail++;
}
head++;
}
Q[tail].next = -1;
now = tail;
while(Q[now].pre != -1)
{
Q[ Q[now].pre ].next = now;
now = Q[now].pre;
}
puts(s[ Q[now].o ]);
while(Q[now].next != -1)
{
now = Q[now].next;
puts(s[ Q[now].o ] );
}
printf("success\n");
}
return 0;
}
ZOJ 1005 Jugs 【BFS】
最新推荐文章于 2021-04-03 23:12:29 发布