#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <iostream>
using namespace std;
#define LL __int64
#define mod 9973
#define N 100010 int n,m,s; bool vis[102][110][110];
struct asd{
int cup1;
int cup2;
int cup3;
int step;
};
asd q[N];
int head,tail; void bfs()
{
memset(vis,0,sizeof(vis)); head=0;tail=1;
q[head].cup1=s;
q[head].cup2=0;
q[head].cup3=0;
q[head].step=0;
vis[s][0][0]=1; int x,y,z;
while(head<tail)
{
int a=q[head].cup1;
int b=q[head].cup2;
int c=q[head].cup3; if(a==b&&a==s/2)
{
printf("%d\n",q[head].step);
return;
}
//cup1->cup2|cup1->cup3|先cup1->cup2后cup1->cup3
if(a>0)
{
//cup1->cup2只能倒满,或者倒不满
//不会出现倒不满的现象,只会倒不倒;
x=a-(n-b);
y=n;
z=c;
if(!vis[x][y][z])
{
vis[x][y][z]=1;
q[tail].cup1=x;
q[tail].cup2=y;
q[tail].cup3=z;
q[tail].step=q[head].step+1;
tail++;
}
x=0;
y=n;
z=m;
if(!vis[x][y][z])
{
vis[x][y][z]=1;
q[tail].cup1=x;
q[tail].cup2=y;
q[tail].cup3=z;
q[tail].step=q[head].step+1;
tail++;
}
x=(a-(m-c));
y=b;
z=m;
if(!vis[x][y][z])
{
vis[x][y][z]=1;
q[tail].cup1=x;
q[tail].cup2=y;
q[tail].cup3=z;
q[tail].step=q[head].step+1;
tail++;
}
}
//cup2->cup1|cup2->cup3|\cup2->cup1;
if(b>0)
{
x=a+b;
y=0;
z=c;
if(!vis[x][y][z])
{
vis[x][y][z]=1;
q[tail].cup1=x;
q[tail].cup2=y;
q[tail].cup3=z;
q[tail].step=q[head].step+1;
tail++;
}
if(b+c>=m)
{
x=a;
y=b-(m-c);
z=m;
if(!vis[x][y][z])
{
vis[x][y][z]=1;
q[tail].cup1=x;
q[tail].cup2=y;
q[tail].cup3=z;
q[tail].step=q[head].step+1;
tail++;
}
x=s-m;
y=0;
z=m;
if(!vis[x][y][z])
{
vis[x][y][z]=1;
q[tail].cup1=x;
q[tail].cup2=y;
q[tail].cup3=z;
q[tail].step=q[head].step+1;
tail++;
}
}
else
{
x=a;
y=0;
z=b+c;
if(!vis[x][y][z])
{
vis[x][y][z]=1;
q[tail].cup1=x;
q[tail].cup2=y;
q[tail].cup3=z;
q[tail].step=q[head].step+1;
tail++;
}
}
}
//cup3->cup1|cup3->cup2\\cup3->cup1
if(c>0)
{
x=a+c;
y=b;
z=0;
if(!vis[x][y][z])
{
vis[x][y][z]=1;
q[tail].cup1=x;
q[tail].cup2=y;
q[tail].cup3=z;
q[tail].step=q[head].step+1;
tail++;
}
if(b+c>=n)
{
x=a;
y=n;
z=c-(n-b);
if(!vis[x][y][z])
{
vis[x][y][z]=1;
q[tail].cup1=x;
q[tail].cup2=y;
q[tail].cup3=z;
q[tail].step=q[head].step+1;
tail++;
}
x=s-n;
y=n;
z=0;
if(!vis[x][y][z])
{
vis[x][y][z]=1;
q[tail].cup1=x;
q[tail].cup2=y;
q[tail].cup3=z;
q[tail].step=q[head].step+1;
tail++;
}
}
else
{
x=a;
y=b+c;
z=0;
if(!vis[x][y][z])
{
vis[x][y][z]=1;
q[tail].cup1=x;
q[tail].cup2=y;
q[tail].cup3=z;
q[tail].step=q[head].step+1;
tail++;
}
}
}
head++;
}
printf("NO\n");
} int main()
{
while(~scanf("%d%d%d",&s,&n,&m))
{
if(s==0&&n==0&&m==0)
break;
if(n<m)
{
int temp=n;
n=m;
m=temp;
}
if(n+m<s||n+m>s||s%2==1)
{
puts("NO");
continue;
}
bfs();
}
return 0;
}

hdoj1495简单BFS的更多相关文章

  1. LightOJ 1012 简单bfs,水

    1.LightOJ 1012  Guilty Prince  简单bfs 2.总结:水 题意:迷宫,求有多少位置可去 #include<iostream> #include<cstr ...

  2. POJ3185(简单BFS,主要做测试使用)

    没事做水了一道POJ的简单BFS的题目 这道题的数据范围是20,所以状态总数就是(1<<20) 第一次提交使用STL的queue,并且是在队首判断是否达到终点,达到终点就退出,超时:(其实 ...

  3. 【POJ 3669 Meteor Shower】简单BFS

    流星雨撞击地球(平面直角坐标第一象限),问到达安全地带的最少时间. 对于每颗流星雨i,在ti时刻撞击(xi,yi)点,同时导致(xi,yi)和上下左右相邻的点在ti以后的时刻(包括t)不能再经过(被封 ...

  4. hdu1312 Red and Black 简单BFS

    简单BFS模版题 不多说了..... 直接晒代码哦.... #include<cstdlib> #include<iostream> #include<cstdio> ...

  5. 逃脱 (简单BFS)

    题目传送门 G逃脱  题目描述 这是mengxiang000和Tabris来到幼儿园的第四天,幼儿园老师在值班的时候突然发现幼儿园某处发生火灾,而且火势蔓延极快,老师在第一时间就发出了警报,位于幼儿园 ...

  6. poj2251 三维简单BFS

    D - (热身)简单宽搜回顾 Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Subm ...

  7. hdu2717Catch That Cow 简单BFS

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2717 刚开始思路错了,用的DP,一直WA,后来才发现是搜索,还是简单的BFS,顿时.... 思路: B ...

  8. luogu 2296 寻找道路 简单BFS

    简单的BFS,练习基础 #include<bits/stdc++.h> #define rep(i,x,y) for(register int i=x;i<=y;i++) #defi ...

  9. poj 3414(简单bfs)

    题目链接:http://poj.org/problem?id=3414 思路:bfs简单应用,增对瓶A或者瓶B进行分析就可以了,一共6种状态. #include<iostream> #in ...

随机推荐

  1. zoj How Many Shortest Path

    How Many Shortest Path 题目: 给出一张图,求解最短路有几条.处理特别BT.还有就是要特别处理map[i][i] = 0,数据有不等于0的情况! 竟然脑残到了些错floyd! ! ...

  2. v-on指令

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. hibernate面试点

    1.谈谈你对hibernate的认识和理解 01.全自动的ORM框架 02.子项目 03.面向对象的思想来解决操作数据库 01.hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JD ...

  4. iOS的基本框架

  5. Delphi ActiveForm发布全攻略

    论坛上很多朋友(也包括我)提到ActiveForm的发布问题,都没有得到很好的解决.下面是本人开发ActiveForm的一点经验,拿出来跟大家分享,开发环境为 Win2000Server,IIS5.0 ...

  6. MYSQL学习拓展一:MySQL 存储过程之游标的使用!

    一.MySQL游标的概念 游标介绍: MySQL的游标(cursor)是一个重要的概念,通过查找资料与自己的理解,主要得出以下几点关于自己的理解. 有数据缓冲的思想:游标的设计是一种数据缓冲区的思想, ...

  7. Java 通过 HTTP 下载文件

    1. [代码]Download.java   package core.spider; import java.io.*;import java.net.*;import java.util.*; / ...

  8. 皮尔逊相关系数的java实现

    相关系数的值介于–1与+1之间,即–1≤r≤+1.其性质如下:当r>0时,表示两变量正相关,r<0时,两变量为负相关.当|r|=1时,表示两变量为完全线性相关,即为函数关系.当r=0时,表 ...

  9. hdu 1286 找新朋友(欧拉函数)

    题意:欧拉函数 思路:欧拉函数 模板,代码略.

  10. 实现自定义xib和storyboard的加载,

    一:加载xib 1.分别创建xib,.h  .m文件继承自UIView. 在xib上绑定类名. 或者创建文件的时候直接勾选xib 2.在控制器中调用类方法 jyq52787网盘/ios/潭州学院/iO ...