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;
}
原文地址:https://www.cnblogs.com/rainydays/p/2827476.html