플로이드워셜 2

(2021 카카오) 합승 택시 요금 JAVA

이 문제는 두가지 방식으로 풀이할수있는데, 플로이드워셜이 직관적으로 잘 와닿아서 먼저 소개하겠다. 그리고 다익스트라 알고리즘으로 풀이를 살펴보겠다. 플로이드 워셜 알고리즘 : 최단경로 업데이트하면서 진행 모든 노드에서 다른 모든 노드까지의 최단 경로 다익스트라와 마찬가지로 단계별로 거쳐 가는 노드를 기준으로 알고리즘 수행 다만 매 단계마다 방문하지 않은 노드 중에 최단 거리를 갖는 노드를 찾는 과정 필요x ->다익스트라와 차이점 2차원 테이블에 최단 거리 정보 저장 DP에 속함 (2차원 테이블의 값을 점화식에 따라 처리하므로 dp임) 각 단계마다 특정 노드 K 거쳐 가는 경우 확인 A -> B로 가는 최단 거리보다 A에서 K를 거쳐 B로 가는 거리가 더 짧은지 Dab = min(Dab, Dak+ Dkb)..

플로이드 워셜 알고리즘

플로이드-워셜 알고리즘(Floyd-Warshall Algorithm)은 그래프에서 가능한 모든 노드 쌍에 대해 최단 거리를 구하는 알고리즘이다. DynamicProgramming 기술에 의거한다. "거쳐가는 정점"을 기준으로 최단거리를 구한다. 코드는 단순히 반복문을 3번 중첩시키기만 하면 되기 때문에 구현에 있어 크게 어려운 부분은 없다. 단, 유의하여야 할 점은 for문에서 가운데 노드(m)이 제일 위에 있어야 한다는 점이다. 시간복잡도는 O(V^3)O(V3)이다. 다익스트라 알고리즘과는 달리 모든 노드 쌍에 대해 최단 거리를 구하고, 음의 가중치를 가지는 그래프에서도 쓸 수 있다. 1을 거쳐가는 경우를 갱신한다 하면 => D[2,3] 과 ( D[2,1] + D[1,3] ) 을 비교하여 최솟값으로 업..