less than 1 minute read

1697

#include <cstdio>
#include <queue>
#include <algorithm>
using namespace std;

const int MAX = 100001;

queue<int> q;
int i, n, k;
bool visited[MAX];
int cnt = 0;

int main() {
	scanf("%d %d", &n, &k);
	q.push(n);
	
	while(1) {
		int size = q.size();
		for (i = 0; i < size; i++) {
			n = q.front();
			q.pop();
			
			if (n == k) {
				printf("%d", cnt);
				return 0;
			}
			if (n > 0 && visited[n-1] == 0) {
				q.push(n-1);
				visited[n-1] = 1;
			}
			if (n < 100000 && visited[n+1]== 0) {
				q.push(n+1);
				visited[n+1] = 1;
			}
			if (n*2 <= 100000 && visited[n*2]== 0) {
				q.push(n*2);
				visited[n*2] = 1;
			}
		}
		cnt++;
	}
	return 0;
}

Categories:

Updated: