非常可乐 (BFS ➕ 模拟)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1495

 

题目大意:

给你两个杯子还有一瓶可乐,问你可不可以通过杯子以及可乐之间互相倒来倒去 使最后两个人喝到相同的可乐,注意杯子没有刻度

 

思路:

这道题很像曾经做过的小学题目,我们不妨把所有情况都列举出来   

a->b  a->c 

b->a  b->c

c->a  c->b

 

总共就是六种情况,然后针对不同的情况不同的讨论。具体的细节实现还是看代码吧

 

  1 #include <iostream>
  2 #include <string>
  3 #include <cstring>
  4 #include <queue>
  5 #include <string.h>
  6 #include <stdio.h>
  7 #include <vector>
  8 
  9 using namespace std;
 10 
 11 int vist[105][105][105],a,b,c;
 12 struct node
 13 {
 14     int a,b,c;
 15     int step;
 16 }s[105];
 17 int sum=0;
 18 void bfs()
 19 {
 20     queue<node>q;
 21     memset(vist,0,sizeof(vist));
 22     node p1;
 23     p1.a=a;
 24     p1.b=0;
 25     p1.c=0;
 26     p1.step=0;
 27     q.push(p1);
 28     vist[p1.a][0][0]=1;
 29     while(!q.empty())
 30     {
 31         p1=q.front();
 32         q.pop();
 33         if((p1.a==a/2&&p1.b==a/2)||(p1.a==a/2&&p1.c==a/2)||(p1.b==a/2&&p1.c==a/2))
 34         {
 35             printf("%d\n",p1.step);
 36             return;
 37         }
 38         node p2;
 39         if(p1.a!=0)
 40         {
 41             if(p1.a>b-p1.b)
 42             {
 43                 p2.a=p1.a-(b-p1.b);
 44                 p2.b=b;
 45                 p2.c=p1.c;
 46                 p2.step=p1.step+1;
 47             }
 48             else
 49             {
 50                 p2.a=0;
 51                 p2.b=p1.b+p1.a;
 52                 p2.c=p1.c;
 53                 p2.step=p1.step+1;
 54             }
 55             if(!vist[p2.a][p2.b][p2.c])
 56             {
 57                 vist[p2.a][p2.b][p2.c]=1;
 58                 q.push(p2);
 59             }
 60         }
 61 
 62         if(p1.a!=0)
 63         {
 64             if(p1.a>c-p1.c)
 65             {
 66                 p2.a=p1.a-(c-p1.c);
 67                 p2.b=p1.b;
 68                 p2.c=c;
 69                 p2.step=p1.step+1;
 70             }
 71             else
 72             {
 73                 p2.a=0;
 74                 p2.b=p1.b;
 75                 p2.c=p1.c+p1.a;
 76                 p2.step=p1.step+1;
 77             }
 78             if(!vist[p2.a][p2.b][p2.c])
 79             {
 80                 vist[p2.a][p2.b][p2.c]=1;
 81                 q.push(p2);
 82             }
 83         }
 84 
 85         if(p1.b!=0)
 86         {
 87             if(p1.b>a-p1.a)
 88             {
 89                 p2.b=p1.b-(a-p1.a);
 90                 p2.a=a;
 91                 p2.c=p1.c;
 92                 p2.step=p1.step+1;
 93             }
 94             else
 95             {
 96                 p2.b=0;
 97                 p2.a=p1.a+p1.b;
 98                 p2.c=p1.c;
 99                 p2.step=p1.step+1;
100             }
101             if(!vist[p2.a][p2.b][p2.c])
102             {
103                 vist[p2.a][p2.b][p2.c]=1;
104                 q.push(p2);
105             }
106         }
107 
108         if(p1.b!=0)
109         {
110             if(p1.b>c-p1.c)
111             {
112                 p2.b=p1.b-(c-p1.c);
113                 p2.a=p1.a;
114                 p2.c=c;
115                 p2.step=p1.step+1;
116             }
117             else
118             {
119                 p2.b=0;
120                 p2.a=p1.a;
121                 p2.c=p1.c+p1.b;
122                 p2.step=p1.step+1;
123             }
124             if(!vist[p2.a][p2.b][p2.c])
125             {
126                 vist[p2.a][p2.b][p2.c]=1;
127                 q.push(p2);
128             }
129         }
130 
131         if(p1.c!=0)
132         {
133             if(p1.c>a-p1.a)
134             {
135                 p2.c=p1.c-(a-p1.a);
136                 p2.a=a;
137                 p2.b=p1.b;
138                 p2.step=p1.step+1;
139             }
140             else
141             {
142                 p2.c=0;
143                 p2.a=p1.a+p1.c;
144                 p2.b=p1.b;
145                 p2.step=p1.step+1;
146             }
147             if(!vist[p2.a][p2.b][p2.c])
148             {
149                 vist[p2.a][p2.b][p2.c]=1;
150                 q.push(p2);
151             }
152         }
153 
154         if(p1.c!=0)
155         {
156             if(p1.c>b-p1.b)
157             {
158                 p2.c=p1.c-(b-p1.b);
159                 p2.a=p1.a;
160                 p2.b=b;
161                 p2.step=p1.step+1;
162             }
163             else
164             {
165                 p2.c=0;
166                 p2.a=p1.a;
167                 p2.b=p1.b+p1.c;
168                 p2.step=p1.step+1;
169             }
170             if(!vist[p2.a][p2.b][p2.c])
171             {
172                 vist[p2.a][p2.b][p2.c]=1;
173                 q.push(p2);
174             }
175         }
176     }
177     printf("NO\n");
178 }
179 int main()
180 {
181     while(scanf("%d%d%d",&a,&b,&c)>0&&(a+b+c))
182     {
183         if(a%2==1)
184         {
185             printf("NO\n");
186             continue;
187         }
188         bfs();
189     }
190     return 0;
191 }

 

全部评论

相关推荐

10-28 10:48
已编辑
门头沟学院 Java
孩子我想要offer:发笔试后还没笔试把我挂了,然后邮箱一直让我测评没测,后面不知道干嘛又给我捞起来下轮笔试,做完测评笔试又挂了😅
点赞 评论 收藏
分享
从小父母离异家里没人管,靠着心里的不安和学校的环境也算是坚持到了学有所成的地步。到了大学环境开始松散不知道该做什么,只觉得在不挂科的基础上能往上考多少就考多少,等到秋招来临才发现自己有多么幼稚无能,今年九月份初才发现自己原来连一个求职的方向都没有。因为之前做过前后端一体的课设,算是有过了解,而对于其他岗位连做什么都不知道,因此这一个半个月在越来越焦虑的同时埋头苦学,事到如今想要活下去我似乎只能走前端这条路了,9月初先是靠着虚假夸大能力的简历得到一些笔试来确定了考察的方向,有一个大厂的无笔试面试最终是拒绝了没有勇气去面对。然后在这个基础上埋头苦学,如今也算是搭好了自己前端学习的框架和思考的瞄,可以逐渐给自己扩展新的知识和能力了,但这并不是一件多好的事儿,因为我发现学的越多越焦虑,学的越多便越无力。因为我感觉我如今努力学习的知识都是竞争对手们早就掌握了的东西,我如今困惑追求答案的难题早就被别人解决。别人早就能得心应手地做出项目而我连思考都会卡壳,看着别人的笔试和面经上那些闻所未闻的题目,我才知道别人到底有多强而我有多幼稚,我什么时候才能达到别人那种堪称熟练的能力呢?而且网上的焦虑越多越多,即便是真有这么高的能力最后也大概落得一个低薪打工人的下场,我真的感到迷茫。秋招都快结束了,而我还在继续痛苦的学习之旅,这些天找前端面试发现似乎问的有些简单跟网上搜到的内容不符(可能因为并不是大厂),我是不是本来就没打算被招所以别人懒得细问呢?我不知道,我只能继续总结下去学习下去,不管如何我都要活下去,如果我能早一些准备就好了,如果暑假能意识到现在这个情况就好了,可惜没有如果。种下一棵树的最好时间是十年前,其次是现在,虽然我相信自己的学习能力,但已经错过了最好的时机,只能在焦虑与痛苦中每天坚持学下去。目前的路还有很长很长,先去把typescript看了,再去巩固vue3的基础,再去练习elementui的使用,如果这能找到实习的话就好了。接下来呢?去学uniapp和小程序,不管如何我都要对得起曾经努力的自己。即便我们都感到痛苦,但我心中还是希望我们都能靠自己的努力来获取自己想要的幸福。
紧张的牛牛等一个of...:在担心什么呢,有一手985的学历在,就算是小厂别人都会要的,咱们双非的人更多,多少还在沉沦的,怕什么了
一句话证明你在找工作
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务