提出 #9304685


ソースコード 拡げる

from collections import deque

class GoalFound(Exception):
    def __init__(self, distance):
        self.distance = distance

class Solver:
    def __init__(self, R, C, start, goal, maze) -> None:
        self.R = R
        self.C = C
        self.start = start
        self.goal = goal
        self.maze = maze
        self.visited = set()
        self.queue = deque([])

    def lookup(self, y, x):
        return self.maze[y-1][x-1]  # to zero origin

    def breadth_first_search(self, y, x, distance):
        if (y, x) == self.goal:
            raise GoalFound(distance)
        if (y, x) in self.visited:
            return
        if not (1 <= y <= self.R):
            return
        if not (1 <= x <= self.C):
            return
        if self.lookup(y, x) == "#":
            return
        if self.lookup(y, x) == ".":
            self.visited.add((y, x))
            self.queue.append((y - 1, x, distance + 1))
            self.queue.append((y, x - 1, distance + 1))
            self.queue.append((y, x + 1, distance + 1))
            self.queue.append((y + 1, x, distance + 1))

    def solve(self) -> str:
        self.queue.append((self.start[0], self.start[1], 0))
        try:
            while len(self.queue) > 0:
                task = self.queue.popleft()
                self.breadth_first_search(*task)
        except GoalFound as e:
            return e.distance


if __name__ == "__main__":
    R, C = list(map(int, input().split()))
    start = tuple(map(int, input().split()))
    goal = tuple(map(int, input().split()))
    maze = []
    for _ in range(R):
        maze.append(list(input()))

    s = Solver(R, C, start, goal, maze)
    print(s.solve())

提出情報

提出日時
問題 C - 幅優先探索
ユーザ hagino3000
言語 Python (3.4.3)
得点 100
コード長 1742 Byte
結果 AC
実行時間 30 ms
メモリ 3700 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 100 / 100
結果
AC × 3
AC × 25
セット名 テストケース
Sample subtask0_sample01.txt, subtask0_sample02.txt, subtask0_sample03.txt
All subtask0_sample01.txt, subtask0_sample02.txt, subtask0_sample03.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask1_16.txt, subtask1_17.txt, subtask1_18.txt, subtask1_19.txt, subtask1_20.txt, subtask1_21.txt, subtask1_22.txt
ケース名 結果 実行時間 メモリ
subtask0_sample01.txt AC 20 ms 3316 KiB
subtask0_sample02.txt AC 20 ms 3316 KiB
subtask0_sample03.txt AC 30 ms 3700 KiB
subtask1_01.txt AC 26 ms 3444 KiB
subtask1_02.txt AC 26 ms 3444 KiB
subtask1_03.txt AC 26 ms 3444 KiB
subtask1_04.txt AC 30 ms 3700 KiB
subtask1_05.txt AC 25 ms 3444 KiB
subtask1_06.txt AC 28 ms 3572 KiB
subtask1_07.txt AC 21 ms 3316 KiB
subtask1_08.txt AC 21 ms 3316 KiB
subtask1_09.txt AC 26 ms 3444 KiB
subtask1_10.txt AC 22 ms 3444 KiB
subtask1_11.txt AC 30 ms 3700 KiB
subtask1_12.txt AC 27 ms 3572 KiB
subtask1_13.txt AC 26 ms 3444 KiB
subtask1_14.txt AC 21 ms 3316 KiB
subtask1_15.txt AC 27 ms 3444 KiB
subtask1_16.txt AC 27 ms 3444 KiB
subtask1_17.txt AC 29 ms 3700 KiB
subtask1_18.txt AC 28 ms 3572 KiB
subtask1_19.txt AC 26 ms 3444 KiB
subtask1_20.txt AC 26 ms 3444 KiB
subtask1_21.txt AC 27 ms 3572 KiB
subtask1_22.txt AC 26 ms 3444 KiB