宝葫芦

有一个n*m的矩阵,里面有一些传送点,每个传送点有k的能量,当你从某个方向进入传送点时,传送点会将你在该方向上瞬移k的距离,如果传送到了下一个传送点会继续传送,直到撞墙或者到平地为止。现在给出一个起点和终点,问从起点到终点的最小步数是多少。传送不计入步数。如果无法到达则输出impossible

计步显然用bfs比较好,传统的bfs每走到一个点的时候就会将这个点标记下来,以后不会再去走,复杂度为O(n*m),然而这个题存在一个问题,就是进入传送门的四个方向的效果是不一样的,如果只标记一次的话,只记录了一个方向的结果,因此传送门应该对每个方向都进行标记。传送门具有方向性,那普通的格子是否需要标记四个方向呢?普通格子不需要标记方向,因为它们从任意一个方向进入都是等价的(实际写的时候为了方便我对所有的点都设置了四个方向的vis)。只需要维护一个队列,进行bfs,每次取出队首的点判断是否是终点,如果是则返回此时的步数,直到队列为空,如果没有搜到终点则输出impossible。

impossible的情况是存在的,例如下面的一个例子

     门E门

这种情况无论如何都到达不了终点。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值