Submission #9311342


Source Code Expand

from collections import deque

H, W, N = list(map(int, input().split()))
maze = []
for _ in range(H):
    maze.append(list(input()))


visited = set()
queue = deque([])


def find_start_pos():
    for h in range(H):
        line = maze[h]
        for w in range(W):
            if line[w] == 'S':
                return (h, w)
    raise ValueError('Not found:S')


candidates = [(-1, 0), (0, -1), (0, 1), (1, 0)]
queue.append((find_start_pos(), 0, 1, 'S'))
while True:
    pos, distance, life, tile = queue.popleft()
    if tile == str(life):
        if life == N:
            print(distance)
            break
        else:
            life += 1
            queue.clear()
            visited = set()

    visited.add(pos)

    for dy, dx in candidates:
        y = pos[0] + dy
        x = pos[1] + dx

        if (0 <= y < H) and (0 <= x < W) and (y, x) not in visited:
            next_tile = maze[y][x]
            if next_tile != 'X':
                queue.append(((y, x), distance + 1, life, next_tile))
                visited.add((y, x))

Submission Info

Submission Time
Task E - チーズ (Cheese)
User hagino3000
Language Python (3.4.3)
Score 100
Code Size 1090 Byte
Status AC
Exec Time 10000 ms
Memory 91680 KiB

Judge Result

Set Name set01 set02 set03 set04 set05
Score / Max Score 20 / 20 20 / 20 20 / 20 20 / 20 20 / 20
Status
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
Set Name Test Cases
set01 data1
set02 data2
set03 data3
set04 data4
set05 data5
Case Name Status Exec Time Memory
data1 AC 20 ms 3316 KiB
data2 AC 28 ms 3316 KiB
data3 AC 62 ms 3828 KiB
data4 AC 10000 ms 91680 KiB
data5 AC 1973 ms 29804 KiB