pots(BFS)

D - Pots

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

Submit Status

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

时间: 2024-09-29 10:15:54

pots(BFS)的相关文章

poj3414 Pots (BFS)

Pots Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12198   Accepted: 5147   Special Judge Description You are given two pots, having the volume of A and B liters respectively. The following operations can be performed: FILL(i)        f

poj3414——Pots(BFS)

Description You are given two pots, having the volume of A and B liters respectively. The following operations can be performed: FILL(i) fill the pot i (1 ≤ i ≤ 2) from the tap; DROP(i) empty the pot i to the drain; POUR(i,j) pour from pot i to pot j

POJ-3414 Pots (BFS)

Description You are given two pots, having the volume of A and B liters respectively. The following operations can be performed: FILL(i)        fill the pot i (1 ≤ i ≤ 2) from the tap; DROP(i)      empty the pot i to the drain; POUR(i,j)    pour from

poj3414 Pots(BFS)

题目链接 http://poj.org/problem?id=3414 题意 有两个杯子,容量分别为A升,B升,可以向杯子里倒满水,将杯子里的水倒空,将一个杯子里的水倒到另一个杯子里,求怎样倒才能使其中的一个杯子里的水恰为C升,输出最少步数和操作:如果不能倒到C升,输出“impossible”. 思路 这题与poj1606基本相同,在poj1606的基础上添加了输出最少步数,修改了操作的表示,以及不可能达到目标时输出impossible.将poj1606的代码略作修改即可. 代码 1 #incl

poj3414 Pots(BFS+路径输出)

转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://poj.org/problem?id=3414 此题和poj1606一样 :http://blog.csdn.net/u012860063/article/details/37772275 Description You are given two pots, having the volume of A and B liters respectively.

POJ 3414 Pots(罐子)

p.MsoNormal { margin-bottom: 10.0000pt; font-family: Tahoma; font-size: 11.0000pt } h1 { margin-top: 5.0000pt; margin-bottom: 5.0000pt; text-align: left; font-family: 宋体; font-weight: bold; font-size: 24.0000pt } span.10 { font-family: "Times New Rom

USACO抓牛catchcow (bfs)

这题是黄巨大出的比赛题. http://poj.org/problem?id=3278 Description Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a point K (0 ≤ K ≤

hdu 1728 逃离迷宫 (BFS)

逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 14376    Accepted Submission(s): 3458 Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有些地方

牛汇(BFS)入金具体流程(图文指导)

牛汇开户流程:bfsforex牛汇入金教程 所谓入金,也就是充值的意思,必须充钱到平台才能进行外汇交易.首先,我们先登录bfsforex牛汇官方网站,在交易办公室功能区域下面,点击账户入金: 为您提供中国各大银行的网银支付解决方案,支持人民币支付,和信用卡入金,入金是实时到账的. 牛汇(BFS)入金具体流程(图文指导),布布扣,bubuko.com