BFS 算法的核心:把同一级的子节点都拉入队列,之后才会去遍历下一级节点
import java.io.*;
import java.util.*;
public class POJ3278 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
if(N >= K){
System.out.println(N - K);
}else{
Queue<Integer> queue = new LinkedList<Integer>();
int maxN = 1000000;
boolean vis[] = new boolean[maxN + 3];
int step[]= new int[maxN + 3];
Arrays.fill(vis, false);
Arrays.fill(step, 0);
vis[N] = true;
queue.add(N);
int cur = 0;
int next = 0;
while(!queue.isEmpty()){
cur = queue.poll();
for(int i = 1;i <= 3;i++){// x-1,x+1,2x三种方式移动
if(i == 1){
next = cur -1;
}else if(i == 2){
next = cur + 1;
}else if(i == 3){
next = cur * 2;
}
if(next >=0 && next <= maxN ){
// System.out.println("next ==" + next);
if(!vis[next]){
step[next] = step[cur] +1;
queue.add(next);
vis[next] = true;
}
if(next == K){
System.out.println(step[next]);
return;
}
}
}
}
}
}
}