AT_abc387_d.[ABC387D] Snaky Walk
普及/提高-
通过率:0%
AC君温馨提醒
该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
有一个 H 行 W 列的网格。从上往下第 i 行、从左往右第 j 列的单元格记为 (i,j)。
每个单元格是起点、终点、空单元格或障碍物,这些信息由 H 个长度为 W 的字符串 S1,S2,…,SH 表示。具体来说,当 Si 的第 j 个字符是 S 时,单元格 (i,j) 是起点;是 G 时是终点;是 . 时是空单元格;是 # 时是障碍物。保证起点和终点各恰好存在一个。
你现在位于起点。你的目标是通过重复移动到当前单元格边相邻的单元格,最终到达终点。但有以下限制:不能移动到障碍物或网格外,且必须交替进行纵向移动和横向移动(首次移动方向可任选)。
请判断能否到达终点,若可能则求出移动次数的最小值。
更形式化地说,请判断是否存在满足以下所有条件的单元格序列 (i1,j1),(i2,j2),…,(ik,jk),若存在则求 k−1 的最小值:
- 对所有 1≤l≤k,满足 1≤il≤H 且 1≤jl≤W,且 (il,jl) 不是障碍物
- (i1,j1) 是起点
- (ik,jk) 是终点
- 对所有 1≤l≤k−1,满足 ∣il−il+1∣+∣jl−jl+1∣=1
- 对所有 1≤l≤k−2,若 il=il+1,则 il+1=il+2
- 对所有 1≤l≤k−2,若 jl=jl+1,则 jl+1=jl+2
输入格式
输入通过标准输入给出,格式如下:
H W
S1
S2
⋮
SH
输出格式
若可以到达终点,输出移动次数的最小值;否则输出 -1。
输入输出样例
输入#1
3 5 .S#.G ..... .#...
输出#1
7
输入#2
3 5 ..#.G ..... S#...
输出#2
-1
输入#3
8 63 ............................................................... ..S...#............................#####..#####..#####..####G.. ..#...#................................#..#...#......#..#...... ..#####..####...####..####..#..#...#####..#...#..#####..#####.. ..#...#..#..#...#..#..#..#..#..#...#......#...#..#..........#.. ..#...#..#####..####..####..####...#####..#####..#####..#####.. ................#.....#........#............................... ................#.....#........#...............................
输出#3
148
说明/提示
约束条件
- 1≤H,W≤1000
- H,W 是整数
- Si 是由
S、G、.、#组成的长度为 W 的字符串 - 起点和终点各恰好存在一个
样例解释 1

按照左图的路径 (1,2)→(2,2)→(2,3)→(3,3)→(3,4)→(2,4)→(2,5)→(1,5),可以通过 7 次移动到达终点。无法用 6 次或更少移动到达终点,因此答案是 7。注意右图所示的连续横向移动(或连续纵向移动)路径是不被允许的。
样例解释 2
无法到达终点。
翻译由 DeepSeek R1 完成
输入解题思路,AI测评打分。不知道怎么写?