广搜基础题,一维空间的搜索
先看题目,后看代码,自然明白。
有两个地方需要注意以下:
1,题目中并没有说n和k这两个数据的关系,我们需要分情况处理
2,题目中的数据范围
#include<stdio.h>
int book[200013];
struct node
{
int x;
int s;
}queue[100003];
int main()
{
int hx,tx;
scanf("%d%d",&hx,&tx);
// 特殊处理:将小于和等于的情况一块处理;
if(hx>=tx)
{
printf("%d",hx-tx);
return 0;
}
/*//第二种:将相等的情况处理
if(hx==tx)
{
printf("0");
return 0;
}
*/
int head=1;
int tail=1;
int next[3]={1,-1,2};
int flag;
book[hx]=1;
queue[head].x=hx;
queue[head].s=0;
tail++;
flag=0;
while(head<tail)
{
for(int i=0;i<3;i++)
{
if(i!=2)
hx=queue[head].x+next[i];
else
hx=2*queue[head].x;
if(hx<0||hx>100001)//注意这里的范围,一开始写的hx>200002,因为考虑到k<100000,但是有个乘二的操作。但是这样runtinme error,改成100001就对了!感觉是出题人的毛病!!
continue;
if(book[hx]==0)
{
book[hx]=1;
queue[tail].x=hx;
queue[tail].s=queue[head].s+1;
tail++;
}
if(hx==tx) {flag=1;break;}
}
if(flag==1) break;
head++;
}
printf("%d",queue[tail-1].s);
return 0;
}```