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;
    }
  • 相关阅读:
    ajax遇到的问题
    Javascript事件传播(冒泡机制) (摘自 博客园 萍水相逢)
    学习的一点体悟和衷告
    localStorag的一点见解
    感谢!
    文件上传的一些方法
    form:form的一点体会
    鼠标事件大汇总
    readonly和disabled的异同
    说说icon图标
  • 原文地址:https://www.cnblogs.com/rainydays/p/2827476.html
Copyright © 2011-2022 走看看