Catch That Cow+广搜(bfs)+基础题

题目链接

广搜基础题,一维空间的搜索
先看题目,后看代码,自然明白。
有两个地方需要注意以下:
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;
}```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值