题目链接
题目大意:
农夫抓奶牛, 有三种
1. 一分钟内从 x 到 x-1
2.一分钟内从 x 到 x+1
3.一分钟内从 x 到 x*2
问至少多少分钟抓到奶牛
解题思路:
本来想着用结构体写 写一半觉得好麻烦 又改成了用队列写
代码如下:
#include<iostream>
#include<queue>
using namespace std;
const int maxn=1e5+1;
int n,k;
int head,tail;
bool vis[maxn];
int s[maxn];//记录步数
queue <int> q;
int bfs()
{
while(!q.empty())
{
head=q.front();//取队首
q.pop();//出队
for(int i=0;i<3;i++)
{
if(i==0)
tail=head-1;
if(i==1)
tail=head+1;
if(i==2)
tail=2*head;
if(tail<0||tail>=maxn)
continue;
if(vis[tail]==false)
{
q.push(tail);
s[tail]=s[head]+1;
vis[tail]=true;
}
if(tail==k)
{
return s[tail];
}
}
}
}
int main()
{
cin>>n>>k;
if(k<n)
{
cout<<n-k<<endl;
return 0;
}
else
{
q.push(n);//将n入队
s[n]=0;
vis[n]=true;
cout<<bfs()<<endl;
}
return 0;
}