[알고리즘]동적 계획(Dynamic Programming)_최단거리 Floyd - Warshall

2022. 6. 13. 23:19· 알고리즘/알고리즘 이론
반응형

💡Floyd - Warshall 

-  모든 노드 ~ 모든 노드 사이의 최단거리를 구하기 위해 사용하는 알고리즘

   (다익스트라 알고리즘: 한 노드~ 모든 다른 노드 사이의 최단거리 구함)

-  D(a,b) = min(D(a,b), D(a,k)+D(k,b))

 

-

   step1. 어떤 경유지도 거치지 않고 출반~도착 최단거리 기본 테이블에서 시작

   step2. 각 출발~도착 경로에서 다른 노드(경유지)를 들른다고 생각하고 최단거리 구함

              만약 경유지를 들르지 않는 것이 더 최단거리면 D(a,b)를 선택해 그대로 유지, 경유지를 들리는 것이

              더 최단거리면 D(a,k)+D(k,b) 선택

              => 경유지(k) = 1부터 시작해서 4까지 업데이트 

  step3. 가장 마지막 테이블이 최종 결과 (배열에도 최종 결과가 저장)

   

 

void floyd(const int W[][], int D[][]){
	int i,j,k;
	D = W; //W는 경유지 거치지 않은 상태의 기본 최단거리
	for (int k = 0; k < N; k++) { //경유지 노드
			for (int i = 0; i < N; i++) { //출발 노드
				for (int j = 0; j < N; j++) { //도착 노드
					// k번째 노드를 거쳐가는 비용이 기존 비용보다 더 작은 경우 갱신
					// 또는 연결이 안되어있던 경우(INF) 연결 비용 갱신.
					D[i][j] = min(D[i][j], D[i][k] + D[k][j]);
				}
			}
		}
}

- 해당 D 배열에는 최단거리의 경유지에 대한 정보는 없다. 따라서 P 배열을 만들어 경유지 표시도 가능

   (경유지 여러개인 경우 가장 큰 인덱스, 경유지 없는 경우 0)

- 최적화 원칙 적용X

반응형

'알고리즘 > 알고리즘 이론' 카테고리의 다른 글

[알고리즘] 깊이 우선 탐색 (DFS)  (0) 2022.07.25
[알고리즘]동적 계획(Dynamic Programming)_이항계수  (0) 2022.06.13
[알고리즘] Graph#1 - MST(Minimum Spanning Tree)  (0) 2022.04.14
[알고리즘] 탐욕 알고리즘 (Greedy Algorithm)  (0) 2022.04.14
[알고리즘] 분할 정복 - 행렬의 곱셈, 마스터 정리, 쉬트라쎈  (0) 2022.04.14
'알고리즘/알고리즘 이론' 카테고리의 다른 글
  • [알고리즘] 깊이 우선 탐색 (DFS)
  • [알고리즘]동적 계획(Dynamic Programming)_이항계수
  • [알고리즘] Graph#1 - MST(Minimum Spanning Tree)
  • [알고리즘] 탐욕 알고리즘 (Greedy Algorithm)
gangmini
gangmini
gangmini
게으른J 의 테크로그
gangmini
전체
오늘
어제
글쓰기방명록관리자
  • 분류 전체보기 (127)
    • 인공지능(AI) & 데이터 분석 (5)
    • Android (91)
      • Coroutine (3)
      • Compose (0)
      • 안드로이드 CS (0)
    • Kotlin (3)
    • Data Structure (0)
    • 알고리즘 (20)
      • 알고리즘 이론 (11)
      • 백준(BOJ) 문제 풀이 (9)
    • Build Tool (2)
    • Git (2)
    • 일본어 (0)
    • 기타(취준, 활동) (0)


인기 글



최근 댓글



최근 글

hELLO · Designed By 정상우.v4.2.2
gangmini
[알고리즘]동적 계획(Dynamic Programming)_최단거리 Floyd - Warshall
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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