zoukankan      html  css  js  c++  java
  • poj3414

    简单题

    View Code
    #include <iostream>
    #include
    <cstdio>
    #include
    <cstdlib>
    #include
    <cstring>
    using namespace std;

    #define maxn 105

    struct Node
    {
    int va, vb, step, pre, opr;
    } q[maxn
    * maxn];

    int a, b, c, l, r;
    bool vis[maxn][maxn];
    int stk[maxn * maxn], top;

    void make(int va, int vb, int opr)
    {
    if (vis[va][vb])
    return;
    vis[va][vb]
    = true;
    q[r].va
    = va;
    q[r].vb
    = vb;
    q[r].step
    = q[l].step + 1;
    q[r].opr
    = opr;
    q[r].pre
    = l;
    r
    ++;
    }

    void output()
    {
    top
    = 0;
    while (l != 0)
    {
    stk[top
    ++] = q[l].opr;
    l
    = q[l].pre;
    }
    printf(
    "%d\n", top);
    for (int i = top - 1; i >= 0; i--)
    switch (stk[i])
    {
    case 1:
    printf(
    "FILL(1)\n");
    break;
    case 2:
    printf(
    "FILL(2)\n");
    break;
    case 3:
    printf(
    "DROP(1)\n");
    break;
    case 4:
    printf(
    "DROP(2)\n");
    break;
    case 5:
    printf(
    "POUR(2,1)\n");
    break;
    case 6:
    printf(
    "POUR(1,2)\n");
    break;
    }
    }

    void bfs()
    {
    q[
    0].va = 0;
    q[
    0].vb = 0;
    q[
    0].step = 0;
    vis[
    0][0] = true;
    l
    = 0;
    r
    = 1;
    while (l != r)
    {
    if (q[l].va == c || q[l].vb == c)
    {
    output();
    return;
    }
    int xa, xb, x;
    xa
    = a;
    xb
    = q[l].vb;
    make(xa, xb,
    1);
    xa
    = q[l].va;
    xb
    = b;
    make(xa, xb,
    2);
    xa
    = 0;
    xb
    = q[l].vb;
    make(xa, xb,
    3);
    xa
    = q[l].va;
    xb
    = 0;
    make(xa, xb,
    4);
    x
    = min(a - q[l].va, q[l].vb);
    xa
    = q[l].va + x;
    xb
    = q[l].vb - x;
    make(xa, xb,
    5);
    x
    = min(b - q[l].vb, q[l].va);
    xa
    = q[l].va - x;
    xb
    = q[l].vb + x;
    make(xa, xb,
    6);
    l
    ++;
    }
    printf(
    "impossible\n");
    }

    int main()
    {
    //freopen("t.txt", "r", stdin);
    scanf("%d%d%d", &a, &b, &c);
    memset(vis,
    0, sizeof(vis));
    bfs();
    return 0;
    }

  • 相关阅读:
    rsync--数据镜像备份_转
    netcat
    tcpdump抓包
    find命令应用exec及xargs
    traceroute/tracert--获取网络路由路径
    TCP/IP各层协议数据格式
    (转)mq经验总结-转
    (转)WebSphere MQ基础命令
    MQ通道搭建以及连通性检查
    (转)java并发之CountDownLatch、Semaphore和CyclicBarrier
  • 原文地址:https://www.cnblogs.com/rainydays/p/2096093.html
Copyright © 2011-2022 走看看