※ 4485 녹색 옷 입은 애가 젤다지?
https://www.acmicpc.net/problem/4485

문제 해결 TIP
다익스트라를 2차원 배열 형태에 적용해보자.
전체 코드
import heapq
# 방향 설정: 상, 하, 좌, 우
dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
def dijkstra(n, graph):
# 비용 테이블을 무한대로 초기화
distance = [[float('inf')] * n for _ in range(n)]
distance[0][0] = graph[0][0]
# 우선순위 큐에 시작점 넣기 (비용, 좌표)
queue = [(graph[0][0], 0, 0)]
while queue:
dist, x, y = heapq.heappop(queue)
# 이미 처리된 노드면 무시
if dist > distance[x][y]:
continue
# 4 방향으로 인접한 노드 확인
for i in range(4):
nx, ny = x + dx[i], y + dy[i]
if 0 <= nx < n and 0 <= ny < n:
# 현재 노드를 거쳐서 가는 것이 더 비용이 적다면 업데이트
cost = dist + graph[nx][ny]
if cost < distance[nx][ny]:
distance[nx][ny] = cost
heapq.heappush(queue, (cost, nx, ny))
return distance[n - 1][n - 1]
count = 1
while True:
# 입력 처리
n = int(input())
if n==0:
break
graph = [list(map(int, input().split())) for _ in range(n)]
# 다익스트라로 최단 경로 구하기
result = dijkstra(n, graph)
print(f"Problem {count}: {result}")
count+=1
'Python > 최단경로' 카테고리의 다른 글
[Algorithm] 프로그래머스 14938 서강그라운드 | 파이썬 (다익스트라) (1) | 2024.09.06 |
---|---|
[Algorithm] 프로그래머스 1238 파티 | 파이썬 (다익스트라) (0) | 2024.09.05 |
[Algorithm] 프로그래머스 1753 최단경로 | 파이썬 (다익스트라) (0) | 2024.09.05 |
[Algorithm] 벨만-포드 알고리즘(Bellman-Ford algorithm) (0) | 2024.01.05 |
[Algorithm] 플로이드-워셜 알고리즘(Floyd-Warshall Algorithm) (1) | 2024.01.05 |
댓글