1. #include <stdio.h>
  2. #include <string.h>
  3. #include <math.h>
  4. #include <algorithm>
  5. #include <iostream>
  6. using namespace std;
  7. #define LL __int64
  8. #define mod 9973
  9. #define N 100010
  10. int n,m,s;
  11. bool vis[102][110][110];
  12. struct asd{
  13. int cup1;
  14. int cup2;
  15. int cup3;
  16. int step;
  17. };
  18. asd q[N];
  19. int head,tail;
  20. void bfs()
  21. {
  22. memset(vis,0,sizeof(vis));
  23. head=0;tail=1;
  24. q[head].cup1=s;
  25. q[head].cup2=0;
  26. q[head].cup3=0;
  27. q[head].step=0;
  28. vis[s][0][0]=1;
  29. int x,y,z;
  30. while(head<tail)
  31. {
  32. int a=q[head].cup1;
  33. int b=q[head].cup2;
  34. int c=q[head].cup3;
  35. if(a==b&&a==s/2)
  36. {
  37. printf("%d\n",q[head].step);
  38. return;
  39. }
  40. //cup1->cup2|cup1->cup3|先cup1->cup2后cup1->cup3
  41. if(a>0)
  42. {
  43. //cup1->cup2只能倒满,或者倒不满
  44. //不会出现倒不满的现象,只会倒不倒;
  45. x=a-(n-b);
  46. y=n;
  47. z=c;
  48. if(!vis[x][y][z])
  49. {
  50. vis[x][y][z]=1;
  51. q[tail].cup1=x;
  52. q[tail].cup2=y;
  53. q[tail].cup3=z;
  54. q[tail].step=q[head].step+1;
  55. tail++;
  56. }
  57. x=0;
  58. y=n;
  59. z=m;
  60. if(!vis[x][y][z])
  61. {
  62. vis[x][y][z]=1;
  63. q[tail].cup1=x;
  64. q[tail].cup2=y;
  65. q[tail].cup3=z;
  66. q[tail].step=q[head].step+1;
  67. tail++;
  68. }
  69. x=(a-(m-c));
  70. y=b;
  71. z=m;
  72. if(!vis[x][y][z])
  73. {
  74. vis[x][y][z]=1;
  75. q[tail].cup1=x;
  76. q[tail].cup2=y;
  77. q[tail].cup3=z;
  78. q[tail].step=q[head].step+1;
  79. tail++;
  80. }
  81. }
  82. //cup2->cup1|cup2->cup3|\cup2->cup1;
  83. if(b>0)
  84. {
  85. x=a+b;
  86. y=0;
  87. z=c;
  88. if(!vis[x][y][z])
  89. {
  90. vis[x][y][z]=1;
  91. q[tail].cup1=x;
  92. q[tail].cup2=y;
  93. q[tail].cup3=z;
  94. q[tail].step=q[head].step+1;
  95. tail++;
  96. }
  97. if(b+c>=m)
  98. {
  99. x=a;
  100. y=b-(m-c);
  101. z=m;
  102. if(!vis[x][y][z])
  103. {
  104. vis[x][y][z]=1;
  105. q[tail].cup1=x;
  106. q[tail].cup2=y;
  107. q[tail].cup3=z;
  108. q[tail].step=q[head].step+1;
  109. tail++;
  110. }
  111. x=s-m;
  112. y=0;
  113. z=m;
  114. if(!vis[x][y][z])
  115. {
  116. vis[x][y][z]=1;
  117. q[tail].cup1=x;
  118. q[tail].cup2=y;
  119. q[tail].cup3=z;
  120. q[tail].step=q[head].step+1;
  121. tail++;
  122. }
  123. }
  124. else
  125. {
  126. x=a;
  127. y=0;
  128. z=b+c;
  129. if(!vis[x][y][z])
  130. {
  131. vis[x][y][z]=1;
  132. q[tail].cup1=x;
  133. q[tail].cup2=y;
  134. q[tail].cup3=z;
  135. q[tail].step=q[head].step+1;
  136. tail++;
  137. }
  138. }
  139. }
  140. //cup3->cup1|cup3->cup2\\cup3->cup1
  141. if(c>0)
  142. {
  143. x=a+c;
  144. y=b;
  145. z=0;
  146. if(!vis[x][y][z])
  147. {
  148. vis[x][y][z]=1;
  149. q[tail].cup1=x;
  150. q[tail].cup2=y;
  151. q[tail].cup3=z;
  152. q[tail].step=q[head].step+1;
  153. tail++;
  154. }
  155. if(b+c>=n)
  156. {
  157. x=a;
  158. y=n;
  159. z=c-(n-b);
  160. if(!vis[x][y][z])
  161. {
  162. vis[x][y][z]=1;
  163. q[tail].cup1=x;
  164. q[tail].cup2=y;
  165. q[tail].cup3=z;
  166. q[tail].step=q[head].step+1;
  167. tail++;
  168. }
  169. x=s-n;
  170. y=n;
  171. z=0;
  172. if(!vis[x][y][z])
  173. {
  174. vis[x][y][z]=1;
  175. q[tail].cup1=x;
  176. q[tail].cup2=y;
  177. q[tail].cup3=z;
  178. q[tail].step=q[head].step+1;
  179. tail++;
  180. }
  181. }
  182. else
  183. {
  184. x=a;
  185. y=b+c;
  186. z=0;
  187. if(!vis[x][y][z])
  188. {
  189. vis[x][y][z]=1;
  190. q[tail].cup1=x;
  191. q[tail].cup2=y;
  192. q[tail].cup3=z;
  193. q[tail].step=q[head].step+1;
  194. tail++;
  195. }
  196. }
  197. }
  198. head++;
  199. }
  200. printf("NO\n");
  201. }
  202. int main()
  203. {
  204. while(~scanf("%d%d%d",&s,&n,&m))
  205. {
  206. if(s==0&&n==0&&m==0)
  207. break;
  208. if(n<m)
  209. {
  210. int temp=n;
  211. n=m;
  212. m=temp;
  213. }
  214. if(n+m<s||n+m>s||s%2==1)
  215. {
  216. puts("NO");
  217. continue;
  218. }
  219. bfs();
  220. }
  221. return 0;
  222. }

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. 把握linux内核设计思想(十二):内存管理之slab分配器

    [版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流.请勿用于商业用途] 上一节最后说到对于小内存区的请求,假设採用伙伴系统来进行分配,则会在页内产生非 ...

  2. crm操作约会实体

    using System;     using Microsoft.Xrm.Sdk;     using Microsoft.Crm.Sdk.Messages;     using Microsoft ...

  3. spring中Bean创建

    Spring中bean的加载过程: 1.获取配置文件资源 2.对获取的xml资源进行一定的处理检验 3.处理包装资源 4.解析处理包装过后的资源 5.加载提取bean并注册(添加到beanDefini ...

  4. linux输入子系统(5) - 学习框架

    注:本系列转自: http://www.ourunix.org/post/290.html input子系统学习系列文章,是我在实际开发过程中遇到也是必须啃下去的第一个Linux驱动,所以有必要记载下 ...

  5. Codeforces Round #420 (Div. 2) E. Okabe and El Psy Kongroo DP+矩阵快速幂加速

    E. Okabe and El Psy Kongroo     Okabe likes to take walks but knows that spies from the Organization ...

  6. These interactions can be expressed as complicated, large scale graphs. Mining data requires a distributed data processing engine

    https://databricks.com/blog/2014/08/14/mining-graph-data-with-spark-at-alibaba-taobao.html

  7. c3p0+spring

    1. 首先是jdbc.properties属性文件的编写,便于数据库移植: datasource.driverClassName=oracle.jdbc.driver.OracleDriverdata ...

  8. IE兼容模式

    何为兼容模式 这个和IE的发展历程相关,在IE8之前Browser基本上属于IE一家独大,然后ie就有很多与web standard不一致的地方,比如只有自己才看得懂的tag等.后来由于chrome, ...

  9. CentOS 7.2安装Jenkins自动构建Git项目

    1.环境 本文使用VMWare虚拟机进行实验. 最终实现目标,在Jenkins服务器上新建构建任务,从Git服务器上拉取master HEAD(不编译,仅演示),部署到"目标服务器" ...

  10. Spring Boot2.0之整合Redis

    需要的maven依赖 jar包,是对Jedis的封装 maven依赖: <project xmlns="http://maven.apache.org/POM/4.0.0" ...