http://poj.org/problem?id=3278
操,没剪枝,RE无数次。。
#include <stdio.h>
#include <string.h>
#define Max 100001
int visited[Max],queue[Max],n,k;
int Breadth_FirstSearch(int p)
{
int front=0,rear=0,head,i,temp;
if(p==k)
return 0;
memset(visited,0,sizeof(visited));
visited[p]=1;
queue[rear++]=p;/*source enter queue*/
while(front<rear)
{
head=queue[front++];//get queue head
for(i=0;i<3;i++)
{
if(i==0)
temp=head-1;
else if(i==2)
temp=head+1;
else
temp=head*2;
if(temp<0||temp>=Max)//剪枝
continue;
if(visited[temp]==0)
{
if(temp==k)
return visited[head];
visited[temp]=visited[head]+1;
queue[rear++]=temp;
}
}
}
}
int main()
{
scanf("%d %d",&n,&k);
if(n>=k)
printf("%d\n",n-k);
else
printf("%d\n",Breadth_FirstSearch(n));
return 0;
}