本篇文章主要讲述了openjudge 2971:抓住那头牛的解题过程,有需要的朋友可以了解一下,希望能够对你有帮助。

总时间限制: 2000ms

内存限制: 65536kB

描述

农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式:

1、从X移动到X-1或X+1,每次移动花费一分钟。

2、从X移动到2*X,每次移动花费一分钟。

假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?

输入

两个整数,N和K

输出

一个整数,农夫抓到牛所要花费的最小分钟数

样例输入

5 17

样例输出

4

这道题就是一道水题。但是。它非常的坑。总结一下BFS就是

1,数组开够。

2,牛和老夫的方向判断。

3,重复入队的判断。

4,超界的判断。

5,人品好。 这是关键。

代码如下:

1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 int x,y; 5 struct node 6 { 7     int x,times; 8 }; 9 node q[3000010];10 int visit[1000010];11 int heads=1,last=1;12 int main()13 {14     scanf("%d%d",&x,&y);15     if(y<x)16     {17       printf("%d",x-y);18       return 0;19     }20     node a;21     a.x=x;a.times=0;22     q[heads]=a;23     while(heads<=last)24     {25       node n=q[heads];26       heads++;27       if(n.x==y)28       {29           printf("%d",n.times);30           break;31       }32       node n1=n;33       n1.times++;34       n1.x+=1;35       if(!visit[n1.x])q[++last]=n1 , visit[n1.x]=1;36       n1.x-=2;37       if(!visit[n1.x])q[++last]=n1 , visit[n1.x]=1;38       n1.x+=1;39       n1.x*=2;40       if(n1.x<=100000&&!visit[n1.x])q[++last]=n1 , visit[n1.x]=1;41     }42     return 0;43 }  

简直尴尬。

相关教程:C++视频教程

更多相关文章

  1. 在C语言中,要求参加运算的数必须是整数的运算符是什么
  2. c语言如何判断整数是几位数
  3. 在c程序中“%”是只能用于整数运算的运算符吗?
  4. 脑洞:如何用一个整数来表示一个列表?
  5. Python 的整数与 Numpy 的数据溢出
  6. 动画:面试官问我如何在 1 亿数据中快速查找某一整数?(上)
  7. 详解php中整数判断的方法(附代码)
  8. php中字符串和整数比较

随机推荐

  1. [Android] 基于 Linux 命令行构建 Androi
  2. android设备上运行i-jetty服务
  3. android 应用内悬浮框,并在指定页面显示
  4. Android Studio 简单介绍和使用问题小结
  5. Android分割线divider(内含Android虚线分
  6. android layout属性介绍
  7. android:layout_gravity与android:gravit
  8. Android初级之路-Android发展史
  9. Android GWES之Android窗口管理
  10. android系统硬件抽象层(HAL)原理及实现之原