poj Catch That Cow bfs

来源:互联网 发布:软件 英语 编辑:程序博客网 时间:2024/05/16 17:31
                                                                                                                                Catch That Cow
Time Limit: 2000MS Memory Limit: 65536KTotal Submissions: 33812 Accepted: 10419

Description

Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a pointN (0 ≤N ≤ 100,000) on a number line and the cow is at a point K (0 ≤ K ≤ 100,000) on the same number line. Farmer John has two modes of transportation: walking and teleporting.

* Walking: FJ can move from any point X to the points X - 1 orX+ 1 in a single minute
* Teleporting: FJ can move from any point X to the point 2 × X in a single minute.

If the cow, unaware of its pursuit, does not move at all, how long does it take for Farmer John to retrieve it?

Input

Line 1: Two space-separated integers: N andK

Output

Line 1: The least amount of time, in minutes, it takes for Farmer John to catch the fugitive cow.

Sample Input

5 17

Sample Output

4

Hint

The fastest way for Farmer John to reach the fugitive cow is to move along the following path: 5-10-9-18-17, which takes 4 minutes.

Source

USACO 2007 Open Silver
 
 
题意:给定两个数,从第一个数到第二个数最少经过几步可以到达,bfs进行搜索
 
 
这个是一维数组进行bfs 学习了一下, 思路都差不多
其实bfs 和dfs就是树的问题
代码:
#include<iostream>#include<queue>#include<algorithm>using namespace std;#define maxn 100001 queue<int> x;bool vis[maxn];int step[maxn];int bfs(int n,int k){int head,next;x.push(n);vis[n]=1;step[n]=0;while(!x.empty()){head=x.front();x.pop();for(int i=0;i<3;i++){if(i==0)  next=head+1;else if(i==1) next=head-1;else if(i==2) next=head*2;if(next>maxn||next<0)continue;if(!vis[next]){x.push(next);step[next]=step[head]+1;vis[next]=1;}if(next==k) return step[next];}}}int main(){int n,k;cin>>n>>k;if(n>=k){cout<<n-k<<endl;}else{cout<<bfs(n,k)<<endl;}return 0;}

 
原创粉丝点击