宝葫芦

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

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

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

     门E门

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


资源下载链接为: https://pan.xunlei.com/s/VOYaEvb5YbXDcdRVMg3ANOaDA1?pwd=sjwe data.py 用于创建数据集。 makelabel.py 的功能是融合数字与背景并保存。其中,一张背景图会在四个象限随机添加一个数字,且几乎无重叠。标签形状为(32,32,11),32×32 是热图输出大小,每个热图像素对应原图 4×4 的方格,每个方格作为分类器,可分出 11 类,0-9 对应数字,10 代表背景。fusion_img 函数将一个数字融合到背景图的随机位置;fusion_4img 函数考虑到单个数字太少,可处理四个数字,输入参数为(背景,(图片 1,标签 1),(图片 2,标签 2)...),输出为图片(0-255)和标签。 model.py 是模型文件,终占用 192kb 内存。 test.py 为测试脚本,包含两个定义的函数,加载模型后可进行单张测试和视频测试,使用时注释另一个即可。onepoint 函数输入矩阵和点的 xy 坐标,逐行扫描该点周围 6 行的像素,若为 1(表示有物体),就将对应方格的 xy 加入数组并置零。扫描完周围 6 行后,若总点数超过 10 个,判定为一个物体,对所有 xy 分别求平均,得到物体中心。 单张图片后处理过程:获取输出的 32×32×11 矩阵,先扫描 32×32 区域,对每行取 argmax,若不属于背景类,说明可能存在物体,再设阈值过滤部分误识别框,然后将该点值置为 1 作为标记。 再次扫描矩阵时,为避免越界,从第 6 行开始到 25 行结束。若扫描到 1,如(20,20,3)这一格为 1,就取矩阵对应 3 的那一层(32×32 大小),将该矩阵和(20,20)坐标传入 onepoint 函数,返回中心,类别为 3。一般不会误判,若一个数字有两种可能且两种像素数都超 10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值