一直很晕,用c++16Ms过,用G++WA!!!!!!!!
http://poj.org/problem?id=3278
#include<stdio.h>
#include<string.h>
#define N 100000
int n,k,vis[N];
struct node
{
int step;
int num;
}p[N*10];
int bfs()
{
memset(vis,0,sizeof(vis));
int head=0,tail=0;
p[head].num=n;
p[head].step=0;
vis[n]=1;
tail++;
while(head<tail)
{
int l=p[head].num;
if(l==k)return p[head].step;
if(p[head].num+1<=N&&!vis[p[head].num+1])
{
p[tail].num=p[head].num+1;
vis[p[head].num+1]=1;
p[tail].step=p[head].step+1;
tail++;
}
if(p[head].num-1>=0&&!vis[p[head].num-1])
{
p[tail].num=p[head].num-1;
vis[p[head].num-1]=1;
p[tail].step=p[head].step+1;
tail++;
}
if(p[head].num*2<=N&&!vis[p[head].num*2])
{
p[tail].num=p[head].num*2;
vis[p[head].num*2]=1;
p[tail].step=p[head].step+1;
tail++;
}
head++;
}
return 0;
}
int main()
{
while(scanf("%d%d",&n,&k)!=EOF)
{
int ans= bfs();
printf("%d\n",ans);
}
}