#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
int m, n;
int z = 0;
int visited[100001];
void bfs() {
queue<pair<int, int>> q;
q.push(make_pair(m, z));
visited[m] = 1;
while (!q.empty()) {
int M = q.front().first;
int Z = q.front().second;
q.pop();
if (M == n)
cout << Z;
if (M + 1 <= 100000 && visited[M+1] == 0) {
q.push(make_pair(M + 1, Z + 1));
visited[M + 1] = 1;
}
if (M - 1>=0 && visited[M-1] == 0) {
q.push(make_pair(M - 1, Z + 1));
visited[M - 1] = 1;
}
if (M * 2 <= 100000 && visited[M * 2] == 0) {
q.push(make_pair(M * 2, Z + 1));
visited[M * 2] = 1;
}
}
}
int main(void) {
cin >> m >> n;
if (m == n) {
cout << 0;
return 0;
}
for (int i = 0; i < 100000; i++) {
visited[i] = 0;
}
bfs();
}
'백준 알고리즘 > BFS' 카테고리의 다른 글
백준 14502번 C++ (0) | 2019.01.10 |
---|---|
백준 2468번 C++ (0) | 2019.01.09 |
백준 11724번 C++ (0) | 2019.01.09 |
백준 2583번 C++ (0) | 2019.01.08 |
백준 11403번 C++ (0) | 2019.01.07 |