# 창영이와 퇴근
import sys
import heapq
N = int(input())
arr = [list(map(int, input().split())) for _ in range(N)]
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]
visited = [[sys.maxsize for _ in range(N)]for _ in range(N)]
def dijkstra(a, b):
q = []
heapq.heappush(q, (0, a, b))
visited[a][b] = 0
while q:
height, x, y = heapq.heappop(q)
if visited[x][y] < height:
continue
for k in range(4):
nx = x + dx[k]
ny = y + dy[k]
if 0 <= nx < N and 0 <= ny < N:
nheight = max(height, abs(arr[nx][ny]-arr[x][y]))
if visited[nx][ny] > nheight:
visited[nx][ny] = nheight
heapq.heappush(q, (nheight, nx, ny))
dijkstra(0, 0)
print(visited[N-1][N-1])
최단거리, 다익스트라
1. 입력을 받는다.
2. 다익스트라
- 연결된 노드 탐색 (리스트 범위 내의 상하좌우 탐색)
- 해당 기울기가 기존 경사보다 작다면 q에 append, visited에 기록
3. 목적지의 최종 경사 출력
(1, 1)에서 시작해서 (N, N)까지 연결된 모든 노드를 탐색하면서 가장 높은 경사를 기록해준다.
리스트 구조상 각 연결된 노드가 붙어있으므로 MST로 봐도 무방한 것 같다.
'Algorithm > BOJ' 카테고리의 다른 글
[백준] 24041번 - 성싶당 밀키트 (파이썬) (0) | 2022.04.15 |
---|---|
[백준] 1726번 - 로봇 (파이썬) (0) | 2022.04.13 |
[백준] 9019번 - DSLR (파이썬) (0) | 2022.04.11 |
[백준] 9370번 - 미확인 도착지 (파이썬) (0) | 2022.04.10 |
[백준] 13904번 - 과제 (파이썬) (0) | 2022.04.09 |