bfs做法
#include<bits/stdc++.h>
using namespace std;
struct manCow
{
int x;//坐标
int deep;//时间
};
queue<manCow> q;
bool flags[100010];//标记该点是否走过,否则会MLE
void bfs(int x, int y)
{
manCow f;
f.x = x;
f.deep = 0;
flags[f.x] = 1;
q.push(f);//入队
while(!q.empty())
{
f = q.front();
q.pop();
if(f.x == y)//退出条件
{
cout << f.deep << endl;
return;
}
manCow fn;
fn.deep = f.deep + 1;//更新时间
if(f.x > y)
{
fn.x = f.x - 1;
if(fn.x >= 0 && fn.x <= 100000)//一定要有, 否则RE
{
if(flags[fn.x] != 1)
{
flags[fn.x] = 1;
q.push(fn);
}
}
}
else
{
for(int i = 0;i < 3;i++)
{
if(i == 0)
fn.x = f.x + 1;
if(i == 1)
fn.x = f.x - 1;
if(i == 2)
fn.x = 2 * f.x;//新的坐标
if(fn.x >= 0 && fn.x <= 100000)
{
if(flags[fn.x] != 1)
{
flags[fn.x] = 1;
q.push(fn);
}
}
}
}
}
}
int main()
{
int fx, cx;
cin >> fx >> cx;
bfs(fx, cx);
return 0;
}