====== 알고스팟 ====== ===== 풀이 ===== * 벽을 부수면서 이동할때의 비용을 1, 벽을 안부수면서 이동할때의 비용을 0이라고 생각하면, 그냥 그리드상에서 최단 경로를 구하는 문제가 된다. [[ps:problems:boj:4485]]를 비롯해서 흔히 접할수 있는 유형이다. * 다만 이 경우는 비용이 0 또는 1 이렇게만 있기 때문에, 일반적인 [[ps:다익스트라 알고리즘]] 대신에 [[ps:단일 출발지 최단 경로#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() * Dependency: [[:ps:teflib:graph#GridGraph|teflib.search.zero_one_distances]] {{tag>BOJ ps:problems:boj:골드_4}}