문제 링크
https://www.acmicpc.net/problem/11403
11403번: 경로 찾기
가중치 없는 방향 그래프 G가 주어졌을 때, 모든 정점 (i, j)에 대해서, i에서 j로 가는 경로가 있는지 없는지 구하는 프로그램을 작성하시오.
www.acmicpc.net
풀이
- 플로이드 워셜 알고리즘을 사용하여 풀 수 있는 문제이다.
: 모든 지점에서 다른 모든 지점까지의 최단 경로를 모두 구해야 하는 경우 사용할 수 있는 알고리즘으로,
점화식 D(a,b) = min(D(a,b), D(a,k) + D(k,b))
- 해당 문제에서는
graph[a][b] 가 1이거나, graph[a][k] 와 graph[k][b]가 모두 1이면 a에서 b로 가는 경로가 있음을 의미한다.
n = int(input())
graph = []
for _ in range(n):
graph.append(list(map(int,input().split())))
for k in range(n):
for i in range(n):
for j in range(n):
if graph[i][j] ==1 or (graph[i][k] == 1 and graph[k][j]):
graph[i][j] = 1
for a in graph:
for b in a:
print(b, end = " ")
print()
'개발 > algorithm' 카테고리의 다른 글
[백준 6064번] 카잉 달력 - python (0) | 2022.02.17 |
---|---|
[백준 1389번] 케빈 베이컨의 6단계 법칙 - python (0) | 2022.02.17 |
[백준 5525번] IOIOI - python (0) | 2022.02.16 |
[백준 11286] 절댓값 힙 - python (0) | 2022.02.16 |
[백준 2178번] 미로 탐색 - python (0) | 2022.02.16 |