|
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