H - Pots

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <string>
 4 #include <cstring>
 5 #include <queue>
 6 using namespace std;
 7 
 8 const int maxn = 105;
 9 
10 char f[10][10] ={ "FILL(1)","FILL(2)","DROP(1)","DROP(2)","POUR(1,2)","POUR(2,1)"};
11 int a,b,c;
12 struct node{
13     int fx, fy;
14     int step, op;
15 }v[maxn][maxn];
16 
17 struct point{
18     int x, y;
19 }s, q;
20 
21 void dfs(int x, int y){
22     if(x == 0 && y == 0){
23         return ;
24     }
25     dfs(v[x][y].fx,v[x][y].fy);
26 
27     cout << f[v[x][y].op] << endl;
28 }
29 
30 queue<point>p;
31 void bfs(){
32     while(!p.empty()) p.pop();
33     s.x = s.y = 0;
34     v[0][0].step = 1;
35 
36     p.push(s);
37     while(!p.empty()){
38         s = p.front(); p.pop();
39 
40         if(s.x == c || s.y == c){
41             cout << v[s.x][s.y].step - 1 << endl;
42             dfs(s.x, s.y);
43             return ;
44         }
45         for(int i = 0 ;i < 6;i++){
46             q = s;
47             if(i == 0){
48                 q.x = a;
49             }
50             else if(i == 1){
51                 q.y = b;
52             }
53             else if(i == 2){
54                 q.x = 0;
55             }
56             else if(i == 3){
57                 q.y = 0;
58             }
59             else if(i == 4){
60                 if(q.x + q.y <= b){
61                     q.y += q.x, q.x = 0;
62                 }
63                 else
64                     q.x -= (b-q.y), q.y = b;
65             }
66             else if(i == 5){
67                  if(q.x+q.y <= a)
68                     q.x += q.y, q.y = 0;
69                  else
70                     q.y -= (a-q.x), q.x = a;
71             }
72 
73             if(v[q.x][q.y].step == 0){
74                 v[q.x][q.y].step = v[s.x][s.y].step+1;
75                 v[q.x][q.y].fx = s.x;
76                 v[q.x][q.y].fy = s.y;
77                 v[q.x][q.y].op = i;
78 
79                 p.push(q);
80             }
81         }
82     }
83     cout << "impossible" << endl;
84 }
85 
86 int main(){
87     cin >> a >> b >> c;
88         //memset(v,0,sizeof(v));
89         bfs();
90 
91     return 0;
92 }

 

posted @ 2018-05-07 20:25  ouyang_wsgwz  阅读(132)  评论(0编辑  收藏  举报