码迷,mamicode.com
首页 > 其他好文 > 详细

2971 抓住那头牛 noi.openjudge

时间:2017-04-09 09:11:28      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:out   ref   content   农夫   namespace   blog   targe   max   方式   

http://noi.openjudge.cn/ch0205/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 #include <iostream>
 2 
 3 #define maxn 100000
 4 
 5 using namespace std;
 6 
 7 int s,t,head,tail;
 8 
 9 bool vis[maxn+5];
10 
11 struct node
12 {
13     int now,val;
14 }que[maxn+5];
15 
16 int main()
17 {
18     cin>>s>>t;
19     que[tail].now=s;
20     que[tail++].val=0;
21     vis[s]=1;
22     while(head<tail)
23     {
24         int now=que[head].now,val=que[head].val;
25         if(now==t)
26         {
27             cout<<val;
28             return 0;
29         }
30         if(!vis[now*2]&&now*2<=maxn&&now)
31         {
32             que[tail].now=now*2;
33             que[tail++].val=val+1;
34             vis[now*2]=1;
35         }
36         if(!vis[now+1]&&now+1<=maxn&&now<t)
37         {
38             que[tail].now=now+1;
39              que[tail++].val=val+1;
40              vis[now+1]=1;
41              
42         }
43         if(!vis[now-1]&&now>0)
44         {
45             que[tail].now=now-1;
46              que[tail++].val=val+1;
47              vis[now-1]=1;
48         }
49         head++;
50     }
51     return 0;
52 }
无限ER
技术分享
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstdlib>
 4 
 5 using namespace std;
 6 
 7 int n,k;
 8 int b[100005];
 9 
10 struct sop
11 {
12     int sum;
13     int step; 
14 }queue[100005];
15 
16 void bfs(int n,int k)
17 {
18     int head=0;
19     int tail=1;
20     queue[tail].sum=n;
21     queue[tail].step=0;
22     b[n]=1;
23     while(head<tail)
24     {
25         head++;
26         if(queue[head].sum==k)
27         {
28             cout<<queue[head].step;
29             return;
30         }
31         if(!b[queue[head].sum*2]&&(queue[head].sum*2<=100000)&&(queue[head].sum!=0))
32         {
33             tail++;
34             queue[tail].sum=queue[head].sum*2;
35             b[queue[head].sum*2]=1;
36             queue[tail].step=queue[head].step+1;
37         } 
38         if(!b[queue[head].sum+1]&&(queue[head].sum+1<=100000)&&(queue[head].sum+1<=k))
39         {
40             tail++;
41             queue[tail].sum=queue[head].sum+1;
42             b[queue[head].sum+1]=1;
43             queue[tail].step=queue[head].step+1;
44         } 
45         if(!b[queue[head].sum-1]&&(queue[head].sum-1>=0))
46         {
47             tail++;
48             queue[tail].sum=queue[head].sum-1;
49             b[queue[head].sum-1]=1;
50             queue[tail].step=queue[head].step+1;
51         }
52     } 
53     return ; 
54 }
55 
56 int main()
57 {
58     cin>>n>>k;
59     
60     bfs(n,k);
61     return 0; 
62 }
AC题解

 

2971 抓住那头牛 noi.openjudge

标签:out   ref   content   农夫   namespace   blog   targe   max   方式   

原文地址:http://www.cnblogs.com/Shy-key/p/6683713.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!