3 条题解
-
0
py题解:
import sys from collections import deque def solve(): data = sys.stdin.read().split() if not data: return n, m = map(int, data[:2]) idx = 2 # 只存储必要的字符网格 grid = [] sx = sy = 0 for i in range(n): row = data[idx] idx += 1 if 'S' in row: sx, sy = i, row.index('S') grid.append(row) if sx == -1: # 没有找到起点 print(-1) return # 使用位运算压缩状态 # state = (x << 20) | (y << 10) | can def encode(x, y, can): return (x << 20) | (y << 10) | can dx = [-1, 0, 1, 0] dy = [0, 1, 0, -1] visited = set() q = deque() start_state = encode(sx, sy, 1) visited.add(start_state) q.append((sx, sy, 1, 0)) # (x, y, can, dist) while q: x, y, can, dist = q.popleft() if grid[x][y] == 'E': print(dist) return # 正常移动 for d in range(4): nx, ny = x + dx[d], y + dy[d] ncan = 1 if 0 <= nx < n and 0 <= ny < m and grid[nx][ny] != '#': state = encode(nx, ny, ncan) if state not in visited: visited.add(state) q.append((nx, ny, ncan, dist + 1)) # 跳跃移动 if can == 1: for d in range(4): nx, ny = x + dx[d] * 2, y + dy[d] * 2 ncan = 0 if 0 <= nx < n and 0 <= ny < m and grid[nx][ny] != '#': state = encode(nx, ny, ncan) if state not in visited: visited.add(state) q.append((nx, ny, ncan, dist + 1)) print(-1) if __name__ == "__main__": solve()
信息
- ID
- 5629
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 27
- 已通过
- 4
- 上传者