您的位置:首页 > 其它

3060 抓住那头奶牛 USACO

2017-04-24 19:36 204 查看

3060 抓住那头奶牛

USACO

时间限制: 1 s 空间限制: 16000 KB 题目等级 : 黄金 Gold 题目描述 Description

农夫约翰被告知一头逃跑奶牛的位置,想要立即抓住它,他开始在数轴的N 点(0≤N≤100000),奶牛在同一个数轴的K 点(0≤K≤100000)。约翰有两种移动方式:1 分钟内从x 点移动到x+1 或x-1;1 分钟内从x 点移动到2x。假设奶牛不会移动,约翰抓住它需要多少时间?

输入描述 Input Description

一行两个整数N 和K,用空格隔开。

输出描述 Output Description

约翰抓住它需要的最少时间。

样例输入 Sample Input

5 17

样例输出 Sample Output

4

数据范围及提示 Data Size & Hint

见题目

思路:广搜。

#include<iostream>
using namespace std;
#include<queue>
struct node{
int x,step;
}cur,net;
queue<node>s;
bool num[100000];
int n,m;
void bfs()
{
cur.x=n;
cur.step=0;
s.push(cur);
num
=1;
while(!s.empty() )
{
cur=s.front() ;
s.pop() ;
int a=cur.x;
if(a*2>0&&a*2<=100000&&!num[a*2]&&a<=m)
{
if(a*2==m)
{
cout<<cur.step+1;
return ;
}
net.x =a*2;
net.step=cur.step +1;
s.push(net);;
num[a*2]=1;
}
if(a+1>0&&a+1<=100000&&!num[a+1])
{
if(a+1==m)
{
cout<<cur.step +1;
return ;
}
net.x =a+2;
net.step=cur.step +1;
s.push(net);
num[a+2]=1;
}
if(a-1>0&&a-1<=100000&&!num[a-1])
{
if(a-1==m)
{
cout<<cur.step +1;
return ;
}
net.x =a-2;
net.step=cur.step +1;
s.push(net);;
num[a-2]=1;
}
}
}
int main()
{
cin>>n>>m;
if(n>=m)
{
cout<<n-m;
return 0;
}
bfs();
return 0;
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: