POJ3278

第一个BFS!写的好艰难,不过在学长的指点下终于写好了,话说学姐写的好抽象~~

附学姐的同题链接:http://blog.csdn.net/zxy_snow/archive/2010/07/15/5738154.aspx

#include <stdio.h> #include <string.h> int flag[300000]; int Q[300000]; int main(void) { int x, y; while(scanf("%d%d", &x, &y) != EOF) { memset(flag, 0, sizeof(flag)); int head=0; int tail=1; Q[head]=x; flag[x] = 1; while(head<tail) { if(Q[head]-1 >=0 && flag[ Q[head] -1 ] == 0) { flag[ Q[head]-1 ] = flag[ Q[head] ] + 1; if(Q[head]-1 >= 0 && Q[head] -1 == y) { break; } else { Q[tail++] = Q[head]-1; } } if(Q[head]+1 <= 100000 && flag[ Q[head] + 1 ] == 0) { flag[ Q[head] + 1 ] = flag[ Q[head] ] + 1; if(Q[head] + 1 == y) { break; } else { Q[tail++] = Q[head] + 1; } } if( Q[head] * 2 <= 100000 && flag[ Q[head] * 2 ] == 0) { flag[ Q[head] * 2] = flag[ Q[head] ] + 1; if(Q[head] * 2 == y) { break; } else { Q[tail++] = Q[head] * 2; } } head++; } printf("%d/n", flag[y]-1); } return 0; }

你可能感兴趣的:(2010)