백준 1697번 문제는 백트래킹 중
깊이우선탐색을 사용하면 된다.
#include <cstdio>
#include <queue>
using namespace std;
#define M 100001
int main()
{
int i, N, K, v, c = 0;
bool a[M] = {0};
queue<int> q1;
scanf("%d%d", &N, &K);
a[N] = true;
q1.push(N);
while(!a[K])
{
c++;
i = q1.size();
while(i--)
{
v = q1.front();
q1.pop();
if(v + 1 < M && a[v + 1] == 0)
{
a[v + 1] = true;
q1.push(v + 1);
}
if(v - 1 >= 0 && a[v - 1] == 0)
{
a[v - 1] = true;
q1.push(v - 1);
}
if(v * 2 < M && a[v * 2] == 0)
{
a[v * 2] = true;
q1.push(v * 2);
}
}
}
printf("%d", c);
}