zoukankan      html  css  js  c++  java
  • BFS POJ 3414 Pots

    题目传送门

      1 /*
      2     BFS:六种情况讨论一下,BFS轻松解决
      3     起初我看有人用DFS,我写了一遍,TLE。。还是用BFS,结果特判时出错,逗了好长时间
      4     看别人的代码简直是受罪,还好自己终于发现自己代码的小错误:)
      5 */
      6 /************************************************
      7 Author        :Running_Time
      8 Created Time  :2015-8-3 14:17:24
      9 File Name     :POJ_3414_BFS.cpp
     10 **************************************************/
     11 
     12 #include <cstdio>
     13 #include <algorithm>
     14 #include <iostream>
     15 #include <sstream>
     16 #include <cstring>
     17 #include <cmath>
     18 #include <string>
     19 #include <vector>
     20 #include <queue>
     21 #include <deque>
     22 #include <stack>
     23 #include <list>
     24 #include <map>
     25 #include <set>
     26 #include <bitset>
     27 #include <cstdlib>
     28 #include <ctime>
     29 using namespace std;
     30 
     31 #define lson l, mid, rt << 1
     32 #define rson mid + 1, r, rt << 1 | 1
     33 typedef long long ll;
     34 const int MAXN = 1e4 + 10;
     35 const int INF = 0x3f3f3f3f;
     36 const int MOD = 1e9 + 7;
     37 struct Point    {
     38     int a, b, step;
     39     int op[MAXN];
     40 };
     41 bool vis[110][110];
     42 int A, B, C;
     43 int ans;
     44 
     45 void BFS(void)  {
     46     memset (vis, false, sizeof (vis));
     47     queue<Point> Q; Q.push ((Point) {0, 0, 0});
     48     while (!Q.empty ()) {
     49         Point p = Q.front ();   Q.pop ();
     50         if (p.a == C || p.b == C)   {
     51             printf ("%d
    ", p.step);
     52             for (int i=1; i<=p.step; ++i)   {
     53                 if (p.op[i] == 1)         puts ("FILL(1)");
     54                 else if (p.op[i] == 2)    puts ("FILL(2)");
     55                 else if (p.op[i] == 3)    puts ("DROP(1)");
     56                 else if (p.op[i] == 4)    puts ("DROP(2)");
     57                 else if (p.op[i] == 5)    puts ("POUR(1,2)");
     58                 else if (p.op[i] == 6)    puts ("POUR(2,1)");
     59             }
     60             return ;
     61         }
     62         Point tmp;
     63         if (p.a < A && !vis[A][p.b])    {
     64             vis[A][p.b] = true;
     65             tmp = p;    tmp.a = A;  tmp.op[++tmp.step] = 1;     //FILL1
     66             Q.push (tmp);
     67         }
     68         if (p.b < B && !vis[p.a][B])    {
     69             vis[p.a][B] = true;
     70             tmp = p;    tmp.b = B;  tmp.op[++tmp.step] = 2;     //FILL2
     71             Q.push (tmp);
     72         }
     73         if (p.a > 0 && !vis[0][p.b])    {
     74             vis[0][p.b] = true;
     75             tmp = p;    tmp.a = 0;  tmp.op[++tmp.step] = 3;     //DROP1
     76             Q.push (tmp);
     77         }
     78         if (p.b > 0 && !vis[p.a][0])    {
     79             vis[p.a][0] = true;
     80             tmp = p;    tmp.b = 0;  tmp.op[++tmp.step] = 4;     //DROP2
     81             Q.push (tmp);
     82         }
     83         if (p.a > 0 && p.b < B) {
     84             int t = min (p.a, B - p.b);
     85             if (!vis[p.a-t][p.b+t]) {
     86                 vis[p.a-t][p.b+t] = true;                       //POUR1->2
     87                 tmp = p;    tmp.a -= t; tmp.b += t; tmp.op[++tmp.step] = 5;
     88                 Q.push (tmp);
     89             }
     90         }
     91         if (p.b > 0 && p.a < A) {
     92             int t = min (p.b, A - p.a);
     93             if (!vis[p.a+t][p.b-t]) {
     94                 vis[p.a+t][p.b-t] = true;                       //POUR2->1
     95                 tmp = p;    tmp.a += t; tmp.b -= t; tmp.op[++tmp.step] = 6;
     96                 Q.push (tmp);
     97             }
     98         }
     99     }
    100 
    101     puts ("impossible");
    102 }
    103 
    104 int main(void)    {       //POJ 3414 Pots
    105     while (scanf ("%d%d%d", &A, &B, &C) == 3) {
    106         BFS ();
    107     }
    108 
    109     return 0;
    110 }
    编译人生,运行世界!
  • 相关阅读:
    个人项目(Word Count Java)
    自我介绍+软工5问
    第六次实践
    第五次实践作业
    第四次实践作业
    第三次实践作业
    第二次实践作业
    第1次实践作业
    第06组 Beta版本演示
    第06组 Beta冲刺(4/4)
  • 原文地址:https://www.cnblogs.com/Running-Time/p/4700364.html
Copyright © 2011-2022 走看看