真的是,太水了。。。原来bfs也有这么多水题
#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <queue>
#include <string.h>
using namespace std;
const int N = 1000005;
const int INF = 1000000;
bool vis[N];
int st, ed, n;
int dir[2] = {1, -1};
struct node
{
int x;
int step;
};
bool check(int x)
{
if(x >= 0 && x <= 1000000 && !vis[x]) return true;
else return false;
}
int bfs()
{
queue <node> q;
node s_pos;
s_pos.x = st;
s_pos.step = 0;
vis[s_pos.x] = 1;
q.push(s_pos);
if(st == ed) return 0;
while(!q.empty())
{
node tmp = q.front();
q.pop();
for(int i = 0; i < 3; i ++)
{
node tmp2;
tmp2 = tmp;
if(i == 0 || i == 1) tmp2.x += dir[i];
else if(i == 2) tmp2.x *= 2;
tmp2.step += 1;
if(check(tmp2.x))
{
if(tmp2.x == ed) return tmp2.step;
vis[tmp2.x] = 1;
q.push(tmp2);
}
}
}
}
int main()
{
// freopen("in.txt", "r", stdin);
while(~scanf("%d%d", &st, &ed))
{
memset(vis, 0, sizeof(vis));
printf("%d\n", bfs());
}
return 0;
}