搜索好弱啊!!!
还要勤加练习才是!!!
一遍一遍的练·······································
#include<stdio.h>
#include<string.h>int ans[200010];
int visit[200010];
int bfs(int start,int end)
{
int t;
int f=0,r=1;
visit[0]=start;ans[start]=0;
while(1)
{
start=visit[f++];
if(start==end)
return ans[end];
t=start+1;
if(t<=2*end&&ans[t]==-1)
ans[t]=ans[start]+1,visit[r++]=t;
t=start-1;
if(t>=0&&ans[t]==-1)
ans[t]=ans[start]+1,visit[r++]=t;
t=2*start;
if(t<=2*end&&ans[t]==-1)
ans[t]=ans[start]+1,visit[r++]=t;
}
return -1;
}
int main()
{
int start,end;
while(scanf("%d%d",&start,&end)!=EOF)
{
memset(ans,-1,sizeof(ans));
printf("%d\n",bfs(start,end));
}
return 0;
}
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2717