사용자 도구

사이트 도구


ps:problems:boj:1261

알고스팟

ps
링크acmicpc.net/…
출처BOJ
문제 번호1261
문제명알고스팟
레벨골드 4
분류

0-1 BFS

시간복잡도O(nm)
인풋사이즈n<=100, m<=100
사용한 언어Python
제출기록34896KB / 180ms
최고기록72ms
해결날짜2022/09/22

풀이

  • 벽을 부수면서 이동할때의 비용을 1, 벽을 안부수면서 이동할때의 비용을 0이라고 생각하면, 그냥 그리드상에서 최단 경로를 구하는 문제가 된다. 녹색 옷 입은 애가 젤다지?를 비롯해서 흔히 접할수 있는 유형이다.
  • 다만 이 경우는 비용이 0 또는 1 이렇게만 있기 때문에, 일반적인 데이크스트라 알고리즘 (Dijkstra's algorithm) 대신에 0-1 BFS를 사용해서 좀더 빠르게 풀수 있다. 이경우의 시간 복잡도는 O(V+E)인데, V와 E가 모두 O(NM)이므로 총 시간복잡도는 O(NM)이 된다.

코드

"""Solution code for "BOJ 1261. 알고스팟".

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

Tags: [0-1 BFS]
"""

import sys
from teflib import graph as tgraph
from teflib import search


def main():
    M, N = [int(x) for x in sys.stdin.readline().split()]
    grid = ''.join(input() for _ in range(N))

    graph = tgraph.GridGraph(N, M)
    dists = search.zero_one_distances(
        lambda u: [(v, int(grid[v])) for v in graph[u]], 0, dest=M * N - 1)
    print(dists[M * N - 1])


if __name__ == '__main__':
    main()

토론

댓글을 입력하세요:
N V G S E
 
ps/problems/boj/1261.txt · 마지막으로 수정됨: 2022/09/22 07:25 저자 teferi