题目链接
题目大意:
农夫抓奶牛, 有三种
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;
}