公式

F - EGFパス 解説 by sounansya


幅優先探索を行えば良いです。現在のマスと隣接するマスのうち書かれた文字が異なるマス同士に辺が張られているとみなし、マス \((1,1)\) からマス \((H,W)\) までの最短距離を求めれば良いです。

実装例(Python3)

from collections import deque

h, w = map(int, input().split())
s = [input() for _ in range(h)]
q = deque()
INF = 10**9
d = [[INF] * w for _ in range(h)]
q.append((0, 0))
dxy = [(1, 0), (-1, 0), (0, 1), (0, -1)]
d[0][0] = 0
while q:
    x, y = q.popleft()
    for k in range(4):
        xx, yy = x + dxy[k][0], y + dxy[k][1]
        if (
            not (0 <= xx < h)
            or not (0 <= yy < w)
            or s[x][y] == s[xx][yy]
            or d[xx][yy] != INF
        ):
            continue
        q.append((xx, yy))
        d[xx][yy] = d[x][y] + 1
print(-1 if d[-1][-1] == INF else d[-1][-1])

投稿日時:
最終更新: