199. K번째 최단경로 찾기
1. 다익스트라 알고리즘
다이나믹 프로그래밍
import sys
import heapq
input = sys.stdin.readline
INF = int(1e9)
n, m, k = map(int, input().split())
graph = [dict() for _ in range(n + 1)]
#k까지의 dp 사용, distance의 역할
dp = [[INF] * k for _ in range(n + 1)]
for _ in range(m):
a, b, c = map(int,input().split())
graph[a][b] = c
def dijkstra(start):
q = []
heapq.heappush(q, (0, start))
dp[start][0] = 0
while q:
dist, now = heapq.heappop(q)
for i in graph[now]:
cost = dist + graph[now][i]
if cost < dp[i][k-1]:
dp[i][k-1] = cost
dp[i].sort()
heapq.heappush(q, (cost, i))
dijkstra(1)
for i in range(1, n + 1):
if dp[i][k - 1] == INF:
print(-1)
else:
print(dp[i][k - 1])
우선순위 큐
import sys
import heapq
input = sys.stdin.readline
def dijkstra(start):
q = []
heapq.heappush(q, (0,start))
distance[1].append(0)
while q:
dist, now = heapq.heappop(q)
for i in graph[now]:
if len(distance[i]) < k:
heapq.heappush(distance[i] , -(dist + graph[now][i]))
heapq.heappush(q, (dist + graph[now][i] , i))
else:
if -distance[i][0] > dist + graph[now][i]:
heapq.heappop(distance[i])
heapq.heappush(distance[i] , -(dist + graph[now][i]))
heapq.heappush(q, (dist + graph[now][i] , i))
n, m, k = map(int,input().split())
graph = [ dict() for _ in range(n + 1)]
distance = [ [] for _ in range(n + 1)]
for _ in range(m):
a, b, c = map(int,input().split())
graph[a][b] = c
dijkstra(1)
for i in range(1,n+1):
if len(distance[i]) <k: print(-1)
else: print(-distance[i][0])
Author And Source
이 문제에 관하여(199. K번째 최단경로 찾기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@corone_hi/199.-K번째-최단경로-찾기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)