|
1 | 1 | import sys |
2 | 2 | input = sys.stdin.readline |
3 | | -INF = int(1e9) # 무한을 의미하는 값으로 10억을 설정합니다. |
| 3 | +INF = int(1e9) # 무한을 의미하는 값으로 10억을 설정 |
4 | 4 |
|
5 | | -# 노드의 개수, 간선의 개수를 입력 받습니다. |
| 5 | +# 노드의 개수, 간선의 개수를 입력받기 |
6 | 6 | n, m = map(int, input().split()) |
7 | | -# 시작 노드 번호를 입력 받습니다. |
| 7 | +# 시작 노드 번호를 입력받기 |
8 | 8 | start = int(input()) |
9 | | -# 각 노드에 연결되어 있는 노드에 대한 정보를 담는 리스트를 만듭니다. |
| 9 | +# 각 노드에 연결되어 있는 노드에 대한 정보를 담는 리스트를 만들기 |
10 | 10 | graph = [[] for i in range(n + 1)] |
11 | | -# 방문한 적이 있는지 체크하는 목적의 리스트를 만듭니다. |
| 11 | +# 방문한 적이 있는지 체크하는 목적의 리스트를 만들기 |
12 | 12 | visited = [False] * (n + 1) |
13 | | -# 최단 거리 테이블을 모두 무한으로 초기화합니다. |
| 13 | +# 최단 거리 테이블을 모두 무한으로 초기화 |
14 | 14 | distance = [INF] * (n + 1) |
15 | 15 |
|
16 | | -# 모든 간선 정보를 입력 받습니다. |
| 16 | +# 모든 간선 정보를 입력받기 |
17 | 17 | for _ in range(m): |
18 | 18 | a, b, c = map(int, input().split()) |
19 | | - # a번 노드에서 b번 노드로 가는 비용이 c라는 의미입니다. |
| 19 | + # a번 노드에서 b번 노드로 가는 비용이 c라는 의미 |
20 | 20 | graph[a].append((b, c)) |
21 | 21 |
|
22 | | -# 방문하지 않은 노드 중에서, 가장 최단 거리가 짧은 노드의 번호를 반환합니다. |
| 22 | +# 방문하지 않은 노드 중에서, 가장 최단 거리가 짧은 노드의 번호를 반환 |
23 | 23 | def get_smallest_node(): |
24 | 24 | min_value = INF |
25 | | - index = 0 # 가장 최단 거리가 짧은 노드 (인덱스) |
| 25 | + index = 0 # 가장 최단 거리가 짧은 노드(인덱스) |
26 | 26 | for i in range(1, n + 1): |
27 | 27 | if distance[i] < min_value and not visited[i]: |
28 | 28 | min_value = distance[i] |
29 | 29 | index = i |
30 | 30 | return index |
31 | 31 |
|
32 | 32 | def dijkstra(start): |
33 | | - # 시작 노드에 대해서 초기화합니다. |
| 33 | + # 시작 노드에 대해서 초기화 |
34 | 34 | distance[start] = 0 |
35 | 35 | visited[start] = True |
36 | 36 | for j in graph[start]: |
37 | 37 | distance[j[0]] = j[1] |
38 | | - # 시작 노드를 제외한 전체 n - 1개의 노드에 대해 반복합니다. |
| 38 | + # 시작 노드를 제외한 전체 n - 1개의 노드에 대해 반복 |
39 | 39 | for i in range(n - 1): |
40 | | - # 현재 최단 거리가 가장 짧은 노드를 꺼내서, 방문 처리합니다. |
| 40 | + # 현재 최단 거리가 가장 짧은 노드를 꺼내서, 방문 처리 |
41 | 41 | now = get_smallest_node() |
42 | 42 | visited[now] = True |
43 | | - # 현재 노드와 연결된 다른 노드를 확인합니다. |
| 43 | + # 현재 노드와 연결된 다른 노드를 확인 |
44 | 44 | for j in graph[now]: |
45 | 45 | cost = distance[now] + j[1] |
46 | 46 | # 현재 노드를 거쳐서 다른 노드로 이동하는 거리가 더 짧은 경우 |
47 | 47 | if cost < distance[j[0]]: |
48 | 48 | distance[j[0]] = cost |
49 | 49 |
|
50 | | -# 다익스트라 알고리즘을 수행합니다. |
| 50 | +# 다익스트라 알고리즘을 수행 |
51 | 51 | dijkstra(start) |
52 | 52 |
|
53 | | -# 모든 노드로 가기 위한 최단 거리를 출력합니다. |
| 53 | +# 모든 노드로 가기 위한 최단 거리를 출력 |
54 | 54 | for i in range(1, n + 1): |
55 | | - # 도달할 수 없는 경우, 무한(INFINITY)이라고 출력합니다. |
| 55 | + # 도달할 수 없는 경우, 무한(INFINITY)이라고 출력 |
56 | 56 | if distance[i] == INF: |
57 | 57 | print("INFINITY") |
58 | | - # 도달할 수 있는 경우 거리를 출력합니다. |
| 58 | + # 도달할 수 있는 경우 거리를 출력 |
59 | 59 | else: |
60 | 60 | print(distance[i]) |
0 commit comments