11403번: 경로 찾기
가중치 없는 방향 그래프 G가 주어졌을 때, 모든 정점 (i, j)에 대해서, i에서 j로 가는 경로가 있는지 없는지 구하는 프로그램을 작성하시오.
www.acmicpc.net
아이디어:
플로이드 와샬 알고리즘을 이용하여 경로를 찾고, 경로가 있는 경우와 없는 경우만 구별해서 출력하면 된다.
graph로 입력받은 배열에서 경로가 존재하지 않는 경우(0인 경우)에 0 대신 INF값을 넣었고, 이를 이용하여 플로이드 와셜 알고리즘으로 탐색하였다. 그 후, graph[i][j]==INF면 0을, 아니면 1을 출력하였다.
import sys
N = int(sys.stdin.readline())
graph = [[] for _ in range(N)]
for i in range(N):
graph[i] = list(map(int, sys.stdin.readline().split()))
INF = 10**9
for i in range(N):
for j in range(N):
if (graph[i][j]==0):
graph[i][j]=INF
dist = [[INF]*N for _ in range(N)]
for k in range(N):
for i in range(N):
for j in range(N):
graph[i][j] = min(graph[i][j], graph[i][k]+graph[k][j])
for i in range(N):
for j in range(N):
if (graph[i][j]==INF):
print(0, end=" ")
else:
print(1, end=" ")
print()
'알고리즘💻 > 벨만포드&플로이드와샬' 카테고리의 다른 글
BOJ 11780번: 플로이드 2 (0) | 2021.02.15 |
---|---|
BOJ 11404번: 플로이드 (0) | 2021.02.15 |
BOJ 1389번: 케빈 베이컨의 6단계 법칙 (0) | 2021.02.15 |
BOJ 1865번: 웜홀 (0) | 2021.02.15 |
BOJ 11657번: 타임머신 (0) | 2021.02.15 |