标签:des style blog http color os strong io
Description
Input
Output
Sample Input
3 5 4
Sample Output
6
Hint
题意:两个水杯,已知体积A,B,经过三种转换方式达到C状态
1.清空水杯A/B
2.装满A/B
3.把A/B杯中的水倒入B/A中
简单BFS 题目的原型是POJ3414 简化
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
int A, B, C;
int vis[105][105];
struct node
{
    int a, b, step;
};
void BFS()
{
    queue <node> q;
    int sa,sb;
    node f,t;
    f.a = 0; f.b = 0; f.step = 0;
    vis[f.a][f.b] = 1;
    q.push(f);
    while (!q.empty())
    {
        t = q.front();
        q.pop();
        if (t.a == C || t.b == C)
        {
            printf("%d\n",t.step);
            return ;
        }
        for (int i = 1; i <= 6; i++)
        {
            if (i == 1) //装满A
            {
                 sa = A;sb = t.b;
            }
            else if (i == 2)//装满B
            {
                 sa = t.a; sb = B;
            }
            else if (i == 3)//把B中水倒入A
            {
                if (t.a + t.b > A)
                    {sb = t.a + t.b - A;sa = A;}
                else
                    {sb = 0; sa = t.a + t.b;}
            }
            else if (i == 4)//把A中水倒入B
            {
                if (t.a + t.b > B)
                    {sa = t.a + t.b - B; sb = B;}
                else
                {
                    sa = 0; sb = t.a + t.b;
                }
            }
            else if (i == 5)//清空A
                {sa = 0; sb = t.b;}
            else
                {sa = t.a; sb = 0;}//清空B
            if (!vis[sa][sb])
            {
                vis[sa][sb] = 1;
                f.a = sa; f.b = sb;
                f.step = t.step + 1;
                q.push(f);
            }
        }
    }
    puts("impossible");
}
int main()
{
    while (scanf("%d%d%d", &A, &B, &C) != EOF)
    {
        memset(vis, 0, sizeof(vis));
        BFS();
    }
    return 0;
}
标签:des style blog http color os strong io
原文地址:http://blog.csdn.net/wjw0130/article/details/38277001