728x90
https://www.acmicpc.net/problem/11779
최소 거리를 구하고 경로도 같이 구해야하는데 다익스트라 알고리즘에 경로도 같이 추가하면 쉽게 풀린다.
# import sys; input = sys.stdin.readline
from heapq import heappop, heappush
def dijkstra(s, e, adj_list):
INF = 987654321
ret = None # dist, route
h = [(0, [s], s)]
visit = [0 for _ in range(len(adj_list))]
while h:
dist, route, cur = heappop(h)
if cur == e:
ret = (str(dist), str(len(route)), ' '.join(map(str, route)))
break
if visit[cur]:
continue
visit[cur] = 1
for adj_dist, adj in adj_list[cur]:
heappush(h, (adj_dist + dist, route+[adj], adj))
return ret
def main():
n, m = int(input()), int(input())
adj_list = [[] for _ in range(n + 1)]
for _ in range(m):
s, e, c = map(int, input().split())
adj_list[s].append((c, e))
s, e = map(int, input().split())
answer = dijkstra(s, e, adj_list)
print('\n'.join(answer))
if __name__ == "__main__":
main()
'STUDY > Algorithm' 카테고리의 다른 글
[백준] 1717 집합의 표현 python (0) | 2022.02.17 |
---|---|
[백준] 2239 스도쿠 python(pypy) (0) | 2022.02.16 |
[백준] 6087 레이저 통신 python (0) | 2022.02.14 |
[백준] 10282 해킹 python (0) | 2022.02.14 |
[프로그래머스] Level 3 섬 연결하기 python (0) | 2022.02.14 |