플로이드-워셜 (Floyd-warshall)

2025. 6. 4. 13:49·PS/알고리즘
목차
  1. 핵심 이론
  2. 구현 방법
  3. 1. 배열 선언 및 초기화
  4. 2. 최단 거리 배열에 그래프 데이터 저장
  5. 3. 점화식으로 배열 갱신
728x90

플로이드-워셜 알고리즘은 그래프에서 최단 거리를 구하는 알고리즘임

기능 특징 시간복잡도 (노드 수:V)
모든 노드 간에 최단 경로 탐색 음수 가중치가 있어도 수행 가능
DP의 원리를 이용해 알고리즘에 접근
O(V³)

핵심 이론

플로이드 워셜 알고리즘을 도출하는 가장 핵심적인 원리는 A노드에서 B노드까지 최단 경로를 구했다고 가정.

최단 경로 위에 k노드가 존재한다면, 그것을 이루는 부분 경로 역시 최단 경로라는 것.

색칠된 경로가 1→5의 최단 경로라면, 1→4 최단 경로와 4→5 최단 경로 역시 색칠된 경로로 이루어질 수 밖에 없음

즉, 전체 경로의 최단 경로는 부분 경로의 최단 경로 조합으로 이루어진다는 의미이므로
다음과 같은 점화식을 도출 가능 함.

📌 도출한 플로이드 워셜 점화식
D[S][E] = Math.min(D[S][E], D[S][K] + D[K][E])

구현 방법

1. 배열 선언 및 초기화

  • D[S][E] 는 노드 S에서 E까지의 최단 거리를 저장한 배열이라고 정의
  • S와 E의 값이 같은 칸은 0, 다른 칸은 INF로 초기화.
  • S==E는 자기 자신에게 가는 데 걸리는 최단경로 값을 의미하기 때문


2. 최단 거리 배열에 그래프 데이터 저장

  • 출발 노드는 S
  • 도착 노드는 E
  • 간선의 가중치는 W
  • D[S][E] = W로 간선의 정보를 배열에 입력

👉 플로이드 워셜 알고리즘은 그래프를 인접 행렬로 표현함을 알 수 있음

D[5][4]는 4가 아니라 5임 (정정)


3. 점화식으로 배열 갱신

기존에 구했던 점화식을 3중 for문의 형태로 반복하면서 배열의 값을 갱신함

// 플로이드 워셜 알고리즘
for 경유지 K에 관해 (1~N)
	for 출발 노드 S에 관해 (1~N)
    		for 도착 노드 E에 관해 (1~N)
            	D[S][E] = Math.min(D[S][E], D[S][K] + D[K][E])

 

완성된 배열은 모든 노드 간의 최단 거리를 알려줌

예를 들어 1→5의 최단 거리는 D[1][5] = 6으로 나타남

플로이드 워셜 알고리즘은 모든 노드 간의 최단 거리를 확인해주므로 시간 복잡도가 빠르지 않음
해당 알고리즘을 사용해야 하는 문제는 일반적으로 노드의 개수 범위가 다른 그래프에 적게 나타남

728x90
  1. 핵심 이론
  2. 구현 방법
  3. 1. 배열 선언 및 초기화
  4. 2. 최단 거리 배열에 그래프 데이터 저장
  5. 3. 점화식으로 배열 갱신
'PS/알고리즘' 카테고리의 다른 글
  • 최소 신장 트리 (Minimum Spanning Tree)
  • 벨만-포드 (Bellman-Ford-moore)
  • 다익스트라 (Dijkstra)
  • 위상 정렬 (Topology Sort)
0woy
0woy
Algorithm, CS, Web 등 배운 내용을 기록합니다.
  • 0woy
    0woy dev
    0woy
  • 전체
    오늘
    어제
  • 🌐 LANGUAGE
    • 분류 전체보기 (80)
      • Backend (21)
        • JAVA (7)
        • DB (11)
        • Spring (1)
        • Spring Security (2)
      • Computer Science (22)
        • 네트워크 (9)
        • 운영체제 (5)
        • 보안 (7)
      • Frontend (15)
        • HTML5 (1)
        • CSS (1)
        • JS (4)
        • Vue 3 (9)
      • PS (16)
        • LeetCode (2)
        • Baekjoon (1)
        • Programmers (1)
        • 알고리즘 (12)
      • Dev Trivia (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    leetcode
    트리
    Spring
    set
    BFS
    대칭키
    java
    RDB
    DP
    Props
    공개키
    비밀키
    CA
    Graph
    Filter
    JS
    javascript
    PreparedStatement
    Vue3
    JDBC
    dfs
    그래프
    shortestpath
    tcp
    https
    속성
    select
    가용성
    security
    function
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
0woy
플로이드-워셜 (Floyd-warshall)

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.