没拿到宝剑时,怪物自己以及它上下左右相邻的格子都是危险格,不能踏入。宝剑格是例外,走进去就能把剑捡走。出发格即使落在危险区里,也允许作为起点,下一步再离开。拿到宝剑之后,这些危险格都能进,踩上怪物也只是击倒脚下这一只;因为持剑已经能进入任何怪物附近,搜索时不必再记录每一只怪物的死活。
穿越这片迷宫、把受困公主救出来,是王子此刻要办的事。毒雾正往四处散开,因此他得用尽量少的时间赶到公主身边。挡路的不只有墙,还有守在若干区域上的怪物。
地图已经给出。王子从出发点动身,要算出抵达公主所在格的最少移动次数。
王子得在两条路线里挑更省步数的一条:
数据来自标准输入。 第一行给出两个整数 h 和 w,分别是地图的行数与列数(1≤h,w≤100),h 与 w 用空格隔开。 随后是 h 行,每一行有 w 个字符,用来描绘整张地图:
# 代表不能落脚的墙输入保证出发格 S 与公主格 P 都恰好出现一次。
答案写到标准输出。只写出一个整数,即王子走到公主处所需的最少步数。 公主处不可达时,结果记成 −1。
输入
3 3
S.M
...
.MP
输出
-1
说明
公主在右下角,左边紧挨着一只怪物,地图里又没有宝剑。没剑时那一格进不去,所以无解。
输入
3 5
S.#.P
..#..
W.M..
输出
8
说明
行列都从 0 计。一条最短路线是 (0,0)→(1,0)→(2,0)→(2,1)→(2,2)→(2,3)→(2,4)→(1,4)→(0,4),共 8 步。(2,0) 处捡到宝剑后才能穿过怪物及其左右两侧。列下标 2 的前两行是墙,不拿剑就无法从左侧走到右侧的公主。
输入
1 5
S...P
输出
4
说明
这一行没有墙也没有怪物。王子从最左格一直向右,走到最右的公主处,步数是 4。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册