zoukankan      html  css  js  c++  java
  • poj1606

    bfs

    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;
        }
        for (int i = top - 1; i >= 0; i--)
            switch (stk[i])
            {
            case 1:
                printf("fill A\n");
                break;
            case 2:
                printf("fill B\n");
                break;
            case 3:
                printf("empty A\n");
                break;
            case 4:
                printf("empty B\n");
                break;
            case 5:
                printf("pour B A\n");
                break;
            case 6:
                printf("pour A B\n");
                break;
            }
        printf("success\n");
    }
    
    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].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++;
        }
    }
    
    int main()
    {
        //freopen("t.txt", "r", stdin);
        while (scanf("%d%d%d", &a, &b, &c) != EOF)
        {
            memset(vis, 0, sizeof(vis));
            bfs();
        }
        return 0;
    }
  • 相关阅读:
    java基础-数组
    泛型 --集合
    单例模式(新)
    static 关键字
    单例模式
    迭代器模式(java版)
    Object类
    JavaWeb学习总结(十七)——JSP中的九个内置对象
    javaweb学习总结(十六)——JSP指令
    javaweb学习总结(十五)——JSP基础语法
  • 原文地址:https://www.cnblogs.com/rainydays/p/2827476.html
Copyright © 2011-2022 走看看