编程题
### 问题描述 小蓝第二天非常想和小桥一起去看电影,因此小蓝早早地睡下,期待第二天陪小桥去玩的时候有个好精神!但无奈做了一个梦,你能帮助小蓝尽快逃出梦境吗? 这是一个镜像的空间,该空间有一个大小为 $n$ 行 $m$ 列的地图,小蓝最初位于该地图的左上角 $(1,1)$ 点。为了逃离这里,小蓝不得不使用”镜光宝盒“!“镜光宝盒”有两个技能: - 一是“镜像逃离”,使用该技能后即可逃离镜像空间。 - 二是“镜像十字”,即第一次使用时,以当前地图的最右边界为轴,复制出一个以该轴对称的新地图!过程如下: ![](https://dn-simplecloud.shiyanlou.com/questions/uid1891959-20230627-1687859659431)此时当前地图就变成了大小为 **$n$ 行 $2m$ 列的新地图**! 当第二次使用时,则会以当前地图的最下方边界为轴,复制出一个以该轴对称的新地图!过程如下: ![](https://dn-simplecloud.shiyanlou.com/questions/uid1891959-20230627-1687859671235) 此时当前地图就变成了大小为 **$2n$ 行 $2m$ 列的新地图**!但该技能**最多只能使用两次**! 由于受到梦境的限制,当使用"镜光宝盒"时,它的一技能只能在最右下角使用,而二技能只能在起点处使用。(**注意**:**地图的最右下角坐标会因当前地图的大小而发生改变**!)。”镜光宝盒“可以在规定限制下无限使用,但二技能最多只能使用两次! 地图上的每个点要么是陷阱(用 `#` 表示),无法通过;要么是空地(用 `*` 表示),允许通过。为了尽快逃离镜像空间,你不得不使用“镜光宝盒”。但小蓝不知道最少移动多少次才可以逃离镜像空间,聪明的你可以告诉他吗?如果无法逃离,请输出 `-1​` 。 **数据保证起点处为空地**。 ### 输入格式 输入共 $n + 1$ 行。 第一行两个整数 $n,m$ ,表示地图为 $n$ 行 $m$ 列。 接下来 $n$ 行,每行 $m$ 个字符,为 `* `或 `#` ( `*` 代表空地, `#` 代表陷阱)。 ### 输出格式 输出一个整数,表示小蓝逃离镜像空间的最少移动次数,如果无法逃离,则输出 `-1`。 ### 样例输入 ``` 5 5 ***#* **#*# **#** ***#* ****# ``` ### 样例输出 ``` -1 ``` ### 说明 样例 与题目中的图片一致,经过两次翻转后仍无法到达最右下角,因此输出结果为 `-1` 。 ### 评测数据规模 $2\leq n\leq m \leq 1000$。
查看答案
赣ICP备20007335号-2