计蒜客习题:一维坐标的移动
题目
样例
代码
#include<iostream>
#include<queue>
using namespace std;
int v[5010],n,a,b,num[5010];
void bfs(int s)
{
queue<int> q;
q.push(s);
v[s]=1;
while(!q.empty())
{
int x=q.front();
q.pop();
for(int i=1;i<=3;i++)
{
int tx;
if(i==1) tx=x+1;
if(i==2) tx=x-1;
if(i==3) tx=2*x;
if(tx<0||tx>n) continue;
if(!v[tx])
{
v[tx]=1;
num[tx]=num[x]+1;
if(tx==b) return;
q.push(tx);
}
}
}
return;
}
int main()
{
cin>>n>>a>>b;
bfs(a);
cout<<num[b];
return 0;
}