码迷,mamicode.com
首页 > 其他好文 > 详细

pots(BFS)

时间:2014-07-29 21:58:32      阅读:402      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   color   os   strong   io   

D - Pots
Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu

Description

You are given two pots, having the volume of A and B liters respectively. The following operations can be performed:

Input

 On the first and only line are the numbers A, B, and C. These are all integers in the range from 1 to 100 and C≤max(A,B).

Output

 The first line of the output must contain the length of the sequence of operations K.  If the desired result can’t be achieved, the first and only line of the file must contain the word ‘impossible’.

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;
}



pots(BFS),布布扣,bubuko.com

pots(BFS)

标签:des   style   blog   http   color   os   strong   io   

原文地址:http://blog.csdn.net/wjw0130/article/details/38277001

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!