플로이드-워셜 예제 - 2
문제 분석
플로이드-워셜 알고리즘을 이해하고 있고, 문제의 요구사항에 따라 적절하게 수정할 수 있는지를 묻는 문제다.
모든 노드 쌍에 관해 경로가 있는지 여부를 확인하는 방법은 플로이드-워셜 알고리즘을 수행해 결과 리스트를 그대로 출력하면 된다.
단, 최단 거리를 구하는 문제가 아니기 때문에 기존 플로이드-워셜 알고리즘에서 최단 거리를 업데이트하는 부분만 수정해야 한다.
손으로 풀어보기
입력 데이터를 인접 행렬에 저장한다.
변경된 플로이드-워셜 알고리즘을 수행한다. S와 E가 모든 중간 경로(K) 중 1개라도 연결돼 있다면 S와 E는 연결 노드로 저장한다.
알고리즘으로 변경된 인접 행렬을 출력한다.
슈도코드
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