플로이드-워셜 예제 - 2

문제 분석

  • 플로이드-워셜 알고리즘을 이해하고 있고, 문제의 요구사항에 따라 적절하게 수정할 수 있는지를 묻는 문제다.

  • 모든 노드 쌍에 관해 경로가 있는지 여부를 확인하는 방법은 플로이드-워셜 알고리즘을 수행해 결과 리스트를 그대로 출력하면 된다.

  • 단, 최단 거리를 구하는 문제가 아니기 때문에 기존 플로이드-워셜 알고리즘에서 최단 거리를 업데이트하는 부분만 수정해야 한다.

손으로 풀어보기

  1. 입력 데이터를 인접 행렬에 저장한다.

  2. 변경된 플로이드-워셜 알고리즘을 수행한다. S와 E가 모든 중간 경로(K) 중 1개라도 연결돼 있다면 S와 E는 연결 노드로 저장한다.

  3. 알고리즘으로 변경된 인접 행렬을 출력한다.

슈도코드

n(노드 개수)
distance(인접 행렬)

for n 반복:
    인접 행렬 데이터 저장

for k n반복:
    for s n반복:
        for e n반복:
            if distance[s][k]가 1이고, distance[k][e]가 1이면:
                distance[s][e]는 1로 저장
                # k를 거치는 모든 경로 중 1개라도 연결된 경로가 있다면
                # s와 e는 연결 노드로 취급

인접 행렬 출력

코드 구현 - 파이썬

코드 구현 - 자바

Last updated