hdu 2717
地址:http://acm.hdu.edu.cn/showproblem.php?pid=2717
题意:三种走法+1,-1,*2,最少几步到指定点。
mark:wa了好多次。bfs算法,注意临界条件。
代码:
#include <stdio.h> #include <string.h> int a[100010],d[100010],n,k; void bfs() { int front = 0,rear = 1,nn; a[0] = n; d[n] = 0; while(front != rear) { nn = a[front++]; if(nn == k) return ; if(nn < 100000 && !d[nn+1]) a[rear++] = nn+1, d[nn+1] = d[nn]+1; if(nn > 0 && !d[nn-1]) a[rear++] = nn-1, d[nn-1] = d[nn]+1; if(nn*2 <= 100000 && !d[nn*2]) a[rear++] = nn*2, d[nn*2] = d[nn]+1; } } int main() { while(~scanf("%d%d", &n, &k)) { memset(d, 0, sizeof(d)); bfs(); printf("%d\n", d[k]); } return 0; }