数组必须开大点
#include <iostream>
#include <stdio.h>
#include
<string.h>
#include <stdlib.h>
using namespace std;
struct node
{
int
x,ans;
}q[1000005];
int jx[]={-1,1};
int n,k;
int
map[1000005],v[1000005];
void bfs()
{
struct node t,f;
int
e=0,s=0;
t.x=n;
v[t.x]=1;
t.ans=0;
q[e++]=t;
while(s<e)
{
t=q[s++];
if(t.x==k)
{
printf("%d\n",t.ans);
break;
}
for(int i=0;i<3;i++)
{
if(i==2)
f.x=t.x*2;
else f.x=t.x+jx[i];
if(!v[f.x]&&f.x>=0&&f.x<=100000)
{
f.ans=t.ans+1;
q[e++]=f;
v[f.x]=1;
}
}
}
}
int main()
{
while(scanf("%d%d",&n,&k)!=EOF)
{
memset(map,0,sizeof(map));
memset(v,0,sizeof(v));
bfs();
}
return 0;
}
原文地址:http://www.cnblogs.com/zhangmingcheng/p/3775898.html