Dijkstra μκ³ λ¦¬μ¦μ΄ νλμ μ μ μμ λ€λ₯Έ μ μ λ€λ‘ κ°λ μ΅λ¨ 거리λ₯Ό ꡬνλ μκ³ λ¦¬μ¦μ΄λΌλ©΄ Floyd-Warshall μκ³ λ¦¬μ¦μ λͺ¨λ μ μ μμ λ€λ₯Έ λͺ¨λ μ μ λ€λ‘ κ°λ μ΅λ¨ 거리λ₯Ό ꡬνλ μκ³ λ¦¬μ¦μ΄λ€.
Step 1. Graphλ₯Ό μ΄κΈ°ννλ€. (Self = 0, Null = INF)
Step 2. Node nλ²μ κ²½μ ν λ λ μ§§κ² κ° μ μλ κ²½μ°λ₯Ό μ λ°μ΄νΈνλ€. (λͺ¨λ nodeλ₯Ό νμ)
private static int N;
private static int[][] infos;
private static void floydWarshall() {
for (int mid = 1; mid <= N; mid++)
for (int start = 1; start <= N; start++)
for (int end = 1; end <= N; end++) {
if (infos[start][end] > infos[start][mid] + infos[mid][end])
infos[start][end] = infos[start][mid] + infos[mid][end];
}
}
Step 1. Graphλ₯Ό μ΄κΈ°ννλ€.
N-to-Nμ 0 μ΄λ€.
μ΄μνμ§ μμΌλ©΄ INF μ΄λ€.
Step 2-1. Node 1μ κ²½μ νλ κ²½μ°λ₯Ό νμνλ€.
3 β 1 β 2μ λΉμ©μ 10μ΄λ€.
κΈ°μ‘΄μ 3 β 2μ λΉμ©μ INFμ΄λ€.
λ μμ κ°μΈ 10μ μ μ₯νλ€.
5 β 1 β 3μ λΉμ©μ 10μ΄λ€.
κΈ°μ‘΄μ 5 β 3μ λΉμ©μ INFμ΄λ€.
λ μμ κ°μΈ 10μ μ μ₯νλ€.
5 β 1 β 4μ λΉμ©μ 8μ΄λ€.
κΈ°μ‘΄μ 5 β 4μ λΉμ©μ INFμ΄λ€.
λ μμ κ°μΈ 8μ μ μ₯νλ€.
Step 2-2. Node 2λ₯Ό κ²½μ νλ κ²½μ°λ₯Ό νμνλ€.
5 β 2 β 4μ λΉμ©μ 6μ΄λ€.
κΈ°μ‘΄μ 5 β 4μ λΉμ©μ 8μ΄λ€.
λ μμ κ°μΈ 6μ μ μ₯νλ€.
Step 2-3. Node 3μ κ²½μ νλ κ²½μ°λ₯Ό νμνλ€.
1 β 3 β 5μ λΉμ©μ 4μ΄λ€.
κΈ°μ‘΄μ 1 β 5μ λΉμ©μ 10μ΄λ€.
λ μμ κ°μΈ 4λ₯Ό μ μ₯νλ€.
Step 2-4. Node 4λ₯Ό κ²½μ νλ κ²½μ°λ₯Ό νμνλ€.