题目链接
题目给了奶牛的坐标,终点的坐标;
我们有三种走法x-1,x+1,2*x,求步数;
#include <iostream>
#include <cstdio>
#include <queue>
#include<cstring>
#include<map>
using namespace std;
struct p
{
int n;
int l;
};
int change(int i,int x)
{
if(i==0)return x-1;
else if(i==1)return x+1;
else return 2*x;
}
int main()
{
int n,k;
scanf("%d%d",&n,&k);
if(n>k)
{
printf("%d\n",n-k);
return 0;
}
if(n==k)
{
printf("0\n");
return 0;
}
p now,next;
now.n=n,now.l=0;
map<int,bool>a;
queue<p>q;
a[n]=1;
q.push(now);
while(!q.empty())
{
now=q.front();
for(int i=0; i<3; i++)
{
next=now;
next.n=change(i,now.n);
if(next.n==k)
{
next.l++;
printf("%d\n",next.l);
return 0;
}
if(next.n>=0&&next.n<=100000&&a[next.n]==0)
{
next.l++;
a[next.n]=1;
q.push(next);
}
}
q.pop();
}
return 0;
}