poj3278 BFS
里面稍微有一个坑的地方
这个地方一定要是100001而不可以是2*k
#pragma warning(disable:4996)
#include<iostream>
#include<string>
#include<cmath>
#include<ctype.h>
#include<memory.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<iomanip>
#include<set>
#include<list>
#include<vector>
#include<stack>
#include<queue>
#define ll long long int
using namespace std;
const int maxn = 100000 + 50;
int n, k;
bool vis[maxn];
int f[maxn];
queue<int> q;
int bfs()
{
while (!q.empty())q.pop();
vis[n] = 1;
f[n] = 0;
q.push(n);
while (!q.empty())
{
int now = q.front();
int next;
q.pop();
for (int i = 0; i < 3; i++)
{
if (i == 0)
next = now - 1;
else if (i == 1)
next = now + 1;
else if (i == 2)
next = 2 * now;
if (next < 0 || next >= 100001) continue;
//if (next >= 0 && next <= 2 * k)
if (!vis[next])
{
q.push(next);
f[next] = f[now] + 1;
vis[next] = 1;
}
if (next == k)
return f[next];
}
}
}
int main()
{
while (cin >> n >> k)
{
memset(vis, 0, sizeof(vis));
memset(f, 0, sizeof(f));
if (n < k)
cout << bfs() << endl;
else
cout << n - k << endl;
}
return 0;
}