n = int(input())
grp = [[0 for col in range(n)] for row in range(n)]
for i in range(n):
for j, v in enumerate(map(int, input().split())):
grp[i][j] = v
for k in range(n):
for i in range(n):
for j in range(n):
if grp[i][k] and grp[k][j]:
grp[i][j] = 1
for i in range(n):
for j in range(n):
print(grp[i][j], end=" ")
print()
다른 블로그들을 참고했습니다
이 문제는 '플로이드 와샬' 알고리즘을 사용합니다
플로이드 와샬에 대해 잘 와닿는 표현이 모든 '거쳐가는 정점' 을 기준으로 알고리즘을 수행한다는 것입니다
개념에 대해 잘 알기만 하면 플로이드 와샬 알고리즘을 그대로 쓰는 것이므로
문제 푸는데에는 어렵지 않을 것입니다
https://blog.naver.com/ndb796/221234427842
'알고리즘' 카테고리의 다른 글
[백준] 16928번(python 파이썬) (0) | 2022.08.18 |
---|---|
[백준] 10026번(python 파이썬) (0) | 2022.08.02 |
[백준] 11286번 (python 파이썬) (0) | 2022.07.24 |
[백준] 17626번 (python 파이썬) (0) | 2022.07.11 |
[백준] 11727번 (python 파이썬) (0) | 2022.07.06 |