목차

거울 설치

ps
링크acmicpc.net/…
출처BOJ
문제 번호2151
문제명거울 설치
레벨골드 4
분류

BFS

시간복잡도O(n^3)
인풋사이즈n<=50
사용한 언어Python
제출기록34832KB / 172ms
최고기록64ms
해결날짜2022/01/22

풀이

코드

"""Solution code for "BOJ 2151. 거울 설치".

- Problem link: https://www.acmicpc.net/problem/2151
- Solution link: http://www.teferi.net/ps/problems/boj/2151

Tags: [BFS]
"""

from teflib import tgraph

MIRROR, DOOR, WALL, EMPTY = '!', '#', '*', '.'


def main():
    N = int(input())
    grid = [input() for _ in range(N)]

    graph = []
    doors = []
    nodes_in_cols = [[] for _ in range(N)]
    for row in grid:
        nodes_in_row = []
        for nodes_in_col, cell in zip(nodes_in_cols, row):
            if cell == WALL:
                nodes_in_row.clear()
                nodes_in_col.clear()
            elif cell in (MIRROR, DOOR):
                node_num = len(graph)
                neighbors = nodes_in_row + nodes_in_col
                graph.append(neighbors)
                for neighbor in neighbors:
                    graph[neighbor].append(node_num)
                if cell == DOOR:
                    doors.append(node_num)
                nodes_in_row.append(node_num)
                nodes_in_col.append(node_num)

    answer = tgraph.min_distances(graph, doors[0])[doors[1]] - 1

    print(answer)


if __name__ == '__main__':
    main()