diff --git a/suhyun113/README.md b/suhyun113/README.md index 163899f..a359954 100644 --- a/suhyun113/README.md +++ b/suhyun113/README.md @@ -10,4 +10,5 @@ | 6차시 | 2024.04.14 | 스택 | [컨트롤 제트](https://school.programmers.co.kr/learn/courses/30/lessons/120853) | [#21](https://github.com/AlgoLeadMe/AlgoLeadMe-10/pull/21) | | 7차시 | 2024.05.09 | 트리 | [원숭이 매달기](https://www.acmicpc.net/problem/2716) | [#31](https://github.com/AlgoLeadMe/AlgoLeadMe-10/pull/31) | | 8차시 | 2024.05.14 | 수학 | [어린 왕자](https://www.acmicpc.net/problem/1004) | [#32](https://github.com/AlgoLeadMe/AlgoLeadMe-10/pull/32) | -| 9차시 | 2024.05.28 | 다익스트라 | [최소비용 구하기](https://www.acmicpc.net/problem/1916) | [#33](https://github.com/AlgoLeadMe/AlgoLeadMe-10/pull/33) | \ No newline at end of file +| 9차시 | 2024.05.28 | 다익스트라 | [최소비용 구하기](https://www.acmicpc.net/problem/1916) | [#33](https://github.com/AlgoLeadMe/AlgoLeadMe-10/pull/33) | +| 10차시 | 2024.07.13 | 플로이드-워셜 | [플로이드](https://www.acmicpc.net/problem/11404) | [#36](https://github.com/AlgoLeadMe/AlgoLeadMe-10/pull/36) | \ No newline at end of file diff --git "a/suhyun113/\355\224\214\353\241\234\354\235\264\353\223\234-\354\233\214\354\205\234/10-suhyun113.py" "b/suhyun113/\355\224\214\353\241\234\354\235\264\353\223\234-\354\233\214\354\205\234/10-suhyun113.py" new file mode 100644 index 0000000..d856392 --- /dev/null +++ "b/suhyun113/\355\224\214\353\241\234\354\235\264\353\223\234-\354\233\214\354\205\234/10-suhyun113.py" @@ -0,0 +1,41 @@ +# 11404 : 플로이드 +import sys + +input = sys.stdin.readline +INF = float('inf') # 최대값 정의 + +# 노드의 개수(n)과 간선의 개수(m) 입력 +n = int(input()) # 도시의 개수 n +m = int(input()) # 버스의 개수 m + +# 2차원 리스트 (그래프 표현) 만들고, 무한대로 초기화(플로이드-워셜 = 이차원 배열) +graph = [[INF] * (n + 1) for _ in range(n + 1)] + +# i에서 j로 갈 수 없는 경우, +# 자기 자신에서 자기 자신으로 가는 비용은 0으로 초기화(대각선에 해당하는 부분)) +for i in range(1, n + 1): + for j in range(1, n + 1): + if i == j: + graph[i][j] = 0 + +# 각 간선에 대한 정보를 입력받아, 그 값으로 초기화 +for _ in range(m): + # A -> B로 가는 비용을 C라고 설정 + i, j, cost = map(int, input().split()) + if graph[i][j] > cost: # 시작 도시와 도착 도시 연결하는 노선 하나가 x + graph[i][j] = cost + +# 점화식에 따라 플로이드 워셜 알고리즘을 수행(3중 for문) +for k in range(1, n + 1): + for i in range(1, n + 1): + for j in range(1, n + 1): + graph[i][j] = min(graph[i][j], graph[i][k] + graph[k][j]) + +# 수행된 결과를 출력 +for i in range(1, n + 1): + for j in range(1, n + 1): + if graph[i][j] == INF: + print(0, end=' ') + else: + print(graph[i][j], end=' ') + print() \ No newline at end of file