大家都说是第一道广搜题,也是我的第一道BFS,道理和广度优先遍历是一样的,下面是AC代码,参考过别人的,先贴出来
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXSIZE 1000000
int vis[MAXSIZE], q[MAXSIZE], d[MAXSIZE];
int n = 0, k = 0, step = 0;
int search(int num)
{
int t;
vis[num] = 1;
int rear = 0, front = 0;
q[rear++] = num;
while(rear > front){
t = q[front++];
if(!vis[t-1] && t > 0) {
q[rear++] = t - 1;
vis[t-1] = 1;
d[t-1] = d[t] + 1;
}
if(!vis[t+1] && t < 100002){
q[rear++] = t + 1;
vis[t+1] = 1;
d[t+1] = d[t] + 1;
}
if(!vis[2*t] && t < 200004){
q[rear++] = t * 2;
vis[2*t] = t * 2;
d[2*t] = d[t] + 1;
}
}
return 0;
}
void init(){
memset(vis, 0, sizeof(vis));
memset(q, 0, sizeof(q));
memset(d, 0, sizeof(d));
return ;
}
int main(){
int ans = 0;
while(~scanf("%d%d", &n, &k)){
init();
search(n);
printf("%d\n", d[k]);
}
return 0;
}