备赛的搜索题总结
**Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a point K (0 ≤ K ≤ 100,000) on the same number line. Farmer John has two modes of transportation: walking and teleporting.
- Walking: FJ can move from any point X to the points X - 1 or X + 1 in a single minute
- Teleporting: FJ can move from any point X to the point 2 × X in a single minute.
If the cow, unaware of its pursuit, does not move at all, how long does it take for Farmer John to retrieve it?
Input
Line 1: Two space-separated integers: N and K
Output
Line 1: The least amount of time, in minutes, it takes for Farmer John to catch the fugitive cow.
Sample Input
5 17
Sample Output
4
Hint
The fastest way for Farmer John to reach the fugitive cow is to move along the following path: 5-10-9-18-17, which takes 4 minutes.**
简单的BFS 此题跟以往不同的是 在一维数组上运用BFS。
#include<stdio.h>
#include<string.h>
struct node
{
int x;
int step;
} q[200020];
int main()
{
int n,m,dx,book[200005]={0};
scanf("%d%d",&n,&m);
int tail=0,head=0;
q[tail].x=n;
q[tail].step=0;
book[n]=1;
tail++;
int flog=0,ans;
while(head<tail)
{
if(q[head].x==m)
{
flog=1;
ans=q[head].step;
break;
}
for(int i=0; i<3; i++)
{
if(i==0)
dx=q[head].x+1;
else if(i==1)
dx=q[head].x-1;
else
dx=q[head].x*2;
if(dx>=0&&dx<=100000&&book[dx]==0)
{
book[dx]=1;
q[tail].x=dx;
q[tail].step=q[head].step+1;
if(q[tail].x==m)
{
flog=1;
ans=q[tail].step;
}
tail++;
}
if(flog)
break;
}
if(flog)
break;
head++;
}
if(flog)
printf("%d\n",ans);
else
printf("NO\n");
return 0;
}