题解 洛谷P1135 【奇怪的电梯】

本题是求至少几次完成,用广搜最方便,因为第一次搜到的便是正确答案,于是就可以愉快的return 0了!!!

老规矩,先呈现我的结构体:

struct f
{
    int t,n;
}v[500];
int l=0,r=1;

 

我是使用队列,v就是队列,l是左指针,r是右指针。(好吧,感觉我的BFS好像跟其他人的不太一样,都怪wasa855)

然后需要判重:

bool u[250];

 

然后就可以开始愉快的BFS了:

//退出机制其实就是当右边界不再更新时,也就是左边界追上右边界时,就退出(使用这种方法一定要判重)
//如果单纯的使用一个bool判断,可能会提早退出
while(l<=r)
    {
        up=v[l].t+k[v[l].t];
        down=v[l].t-k[v[l].t];
        if(up==b||down==b)
        {
            printf("%d",v[l].n+1);
            return 0;
        }
        if(up<=n&&u[up]==false)
        {
            u[up]=true;//判重
            v[r].t=up;
            v[r].n=v[l].n+1;
            ++r;//不要忘记加右边界
        }
        if(down>=1&&u[down]==false)
        {
            u[down]=true;//判重
            v[r].t=down;
            v[r].n=v[l].n+1;
            ++r;//不要忘记加右边界
        }
        ++l;//不要忘记加左边界
    }

 

up就是升到的楼层,down是下降到的楼层。

很多小盆友可能不理解BFS的运作思路,这里顺带提一下:

其实就是横着搜!!!

大佬wasa855说,深搜和广搜就是傻子和聪明人走迷宫的区别。

深搜就是傻子一个劲的往里冲,碰到不能走或者边界(边界好像也不能走),就往回走(回溯)

广搜呢,就是聪明人,他们把能走的都先看一遍,再往下走。

不过傻子和聪明人各有所长,大家要因题而异。(不要因为我说深搜是傻子就不用)

2018-03-27

转载于:https://www.cnblogs.com/Point-King/p/9740827.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值