POJ3278 Catch that cow

Posted hoyoak

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ3278 Catch that cow相关的知识,希望对你有一定的参考价值。

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的主要内容,如果未能解决你的问题,请参考以下文章

POJ 3278 Catch That Cow

POJ 3278 - Catch That Cow - [BFS]

POJ 3278 Catch That Cow(模板——BFS)

poj3278Catch That Cow

POJ 3278: Catch That Cow

poj3278 Catch That Cow