#include<iostream>
#include<cstdlib>
#include<queue>
#include<cstring>
using namespace std;
int v, e;
int visited[100010];
struct node
{
int x;
int mintime;
node(int y,int m)
{
x = y;
mintime = m;
};
};
queue<node> q;
int main()
{
memset(visited,0,sizeof(visited));
cin >> v>> e;
node r(v, 0);
q.push(r);
visited[r.x] = 1;
while (!q.empty())
{
node k = q.front();
if (k.x == e)
{
cout<<k.mintime;
return 0;
}
else{
if (k.x - 1 >= 0 && !visited[k.x - 1])
{
node a(k.x-1,k.mintime+1);
visited[a.x] = 1;
q.push(a);
}
if (k.x + 1 <=100000 && !visited[k.x + 1])
{
node b(k.x+1,k.mintime+1);
visited[b.x] = 1;
q.push(b);
}
if (2 * k.x <= 100000 && !visited[2 * k.x])
{
node c(k.x*2,k.mintime+1);
visited[c.x] = 1;
q.push(c);
}
q.pop();
}
}
return 0;
}
ps:这道题考察了bfs,我提交了几次都是wa,后来发现是数组和数字取小了,测试案例中一定有比较大的数据,一定仔细看题意给定范围,一般我们给个大于题目几十的数据就行!加油加油!
bfs:
一层一层搜索,知道搜索到目标节点即为最短路径。