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

POJ3278 Catch that cow

时间:2019-10-08 14:26:10      阅读:63      评论:0      收藏:0      [点我收藏+]

标签:tin   题解   pop   reg   ace   cow   时间   printf   catch   

Description

在一个数轴上开始农夫在位置N,奶牛在位置K,奶牛的位置不动,农夫每次有三种选择:

1,向左走一步,花费1秒 2,向右走一步,花费一秒 3,走到2*n的位置,花费一秒

问农夫最少花多长时间找到奶牛。

Input

N和K

Output

最短的时间

 

题解:是一道bfs的入门题,注意只有向左走一步才能往左走,注意添加if(k<n)printf("%d\n",n-k);的剪枝。

 

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<queue>
 6 #define maxn 1000005
 7 
 8 using namespace std;
 9 
10 int step[maxn],n,k;
11 bool vis[maxn];
12 queue <int> q;
13 
14 inline void bfs(int pos)
15 {
16     step[pos]=0;
17     vis[pos]=true;
18     q.push(pos);
19     while(!q.empty())
20     {
21         int p=q.front(); q.pop();
22         for(register int i=1;i<=3;++i)
23         {
24             int nxt;
25             if(i==1) nxt=p+1;
26             else if(i==2) nxt=p-1;
27             else if(i==3) nxt=p*2;
28             if(nxt<0||nxt>=maxn) continue;
29             if(!vis[nxt])
30             {
31                 step[nxt]=step[p]+1;
32                 vis[nxt]=true;
33                 q.push(nxt);
34             }
35             if(nxt==k) return;
36         }
37     }
38     return;
39 }
40 
41 int main()
42 {
43     while(!q.empty()) q.pop();
44     scanf("%d%d",&n,&k);
45     if(n>=k)
46     {
47         printf("%d\n",n-k);
48         return 0;
49     }
50     bfs(n);
51     printf("%d\n",step[k]);
52     return 0;
53 }

 

POJ3278 Catch that cow

标签:tin   题解   pop   reg   ace   cow   时间   printf   catch   

原文地址:https://www.cnblogs.com/Hoyoak/p/11634932.html

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