http://poj.org/problem?id=3278
(1)稍微考虑就可以知道,要用广搜,广搜次数也不需要控制(因为一定会在远小于10万次以内找到)。
(2)有一次RE,*2时没有判断是否超出10万。
具体代码:

#include<stdio.h> #include<string.h> #include<queue> using namespace std; int n, m; struct node { int n, t; }e, s; int mark[100100]; void bfs() { int i, j, k; memset(mark, 0, sizeof(mark)); mark[n]=1; queue<node>q; while(!q.empty()) q.pop(); e.n=n, e.t=0; q.push(e); while(!q.empty()) { e=q.front(); q.pop(); if(e.n==m) {printf("%d\n", e.t); return ;} s.n=e.n-1, s.t=e.t+1; if(s.n>=0&&!mark[s.n]) {q.push(s);mark[s.n]=1;} s.n=e.n+1, s.t=e.t+1; if(!mark[s.n]) {q.push(s);mark[s.n]=1;} s.n=e.n*2; if(s.n<100100&&!mark[s.n]) {q.push(s);mark[s.n]=1;} } } int main() { while(scanf("%d%d", &n, &m)!=EOF) { bfs(); } return 0; }