[kuangbin带你飞]专题一 简单搜索 C - Catch That Cow

POJ - 3278

Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (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 - 1 or + 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 and K

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.

明明是一道BFS模板题,错了好多次,这大概就是菜逼把orz

#include <iostream> 
#include <queue> 
#define SIZE 100001 
  
using namespace std; 
  
queue<int>x; 
bool visited[SIZE]; 
int step[SIZE]; 
  
int bfs(int n,int k) 
{ 
    int head, next; 
    x.push(n); 
    visited[n]=true; 
    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 next=head*2;   
            if(next>SIZE||next<0) continue;  
            if (!visited[next]) 
            { 
                x.push(next);   
                step[next] = step[head] + 1; 
                visited[next] = true; 
            } 
            if (next == k) return step[next]; 
        } 
    } 
} 
  
int main() 
{
    int n, k; 
    cin>>n>>k; 
    if (n>=k) 
    { 
        cout<<n-k<<endl; 
    } 
    else 
    { 
        int f=bfs(n,k);
        cout<<f<<endl; 
    } 
    return 0; 
} 

猜你喜欢

转载自blog.csdn.net/weixin_40829921/article/details/81209702
今日推荐