๐ ๋ฌธ์
https://www.acmicpc.net/problem/11780
๐ ์์ด๋์ด
ํ๋ก์ด๋ ์๊ณ ๋ฆฌ์ฆ๊ณผ, ํ๋ก์ด๋ ์๊ณ ๋ฆฌ์ฆ์ ์ต๋จ ๊ฒฝ๋ก ์์ ๋ฐฉ๋ฌธํ๋ ๋์๋ค์ ์ฐพ์ผ๋ฉด ๋๋ ๋ฌธ์ ์์ต๋๋ค.
p โก๏ธ q๋ก ๊ฐ๋๊ฒฝ์ฐ i๋ฅผ ๊ฑฐ์ณ์ ( p โก๏ธ i , i โก๏ธ q) ๊ฐ๋ ๊ฒฝ์ฐ๋ก ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ณ์ฐ ํฉ๋๋ค.
์ด๋ ๋ง์ฝ ์ต๋จ ๊ฒฝ์ฐ๋ก ๊ฐฑ์ ๋๋ ๊ฒฝ์ฐ ๋ฐฉ๋ฌธํ๋ ๋์์ ๋ฆฌ์คํธ๋ฅผ ๊ฐฑ์ ํ๋ ๋ฐฉ์์ผ๋ก ํ์ด ํด๊ฒฐํ์์ต๋๋ค.
99%์์ ํ๋ ธ์ต๋๋ค๊ฐ ๋์์๋๋ฐ, ์ด ๋ฌธ์ ๋ ๋ง์ฝ dMap[i][j]์ ๋๋ฌํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ์๋(์ฆ dMap[i][j]๊ฐ MAX์ธ ๊ฒฝ์ฐ) ๋ฐฉ๋ฌธ ๋์๋ฅผ ์ถ๋ ฅํ๊ณ ์๋ค๋ ๋ฌธ์ ์์ต๋๋ค. ํด๋น ๋ถ๋ถ์ ์์ ํ์ฌ ํต๊ณผ ํ์์ต๋๋ค.
ํ๋ก์ด๋ ์์ ๊ด๋ จ ๊ธ
https://chanhuiseok.github.io/posts/algo-50/
๐ ํ์ด
package ๋ฐฑ์ค.graph.floydWarshall;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.StringTokenizer;
public class Boj_11780_ํ๋ก์ด๋2 {
public static final int MAX = (int) 1e8;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder sb = new StringBuilder();
int city = Integer.parseInt(br.readLine());
int line = Integer.parseInt(br.readLine());
int[][] dMap = new int[city][city];
List<Integer>[][] cities = new ArrayList[city][city];
for (int i = 0; i < city; i++) {
for (int j = 0; j < city; j++) {
cities[i][j] = new ArrayList<>();
if (i != j) {
cities[i][j].add(i + 1);
cities[i][j].add(j + 1);
}
}
}
for (int i = 0; i < city; i++) {
Arrays.fill(dMap[i], MAX);
dMap[i][i] = 0;
}
while (line-- > 0) {
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
dMap[a - 1][b - 1] = Math.min(c, dMap[a - 1][b - 1]);
}
for (int i = 0; i < city; i++) {
for (int p = 0; p < city; p++) {
for (int q = 0; q < city; q++) {
if (dMap[p][q] > dMap[p][i] + dMap[i][q]) {
dMap[p][q] = dMap[p][i] + dMap[i][q];
ArrayList<Integer> temp = new ArrayList<>(cities[p][i]);
temp.remove(temp.size() - 1);
temp.addAll(cities[i][q]);
cities[p][q] = temp;
}
}
}
}
for (int i = 0; i < city; i++) {
for (int j = 0; j < city; j++) {
if (dMap[i][j] == MAX) {
sb.append(0).append(" ");
} else sb.append(dMap[i][j]).append(" ");
}
sb.append("\n");
}
for (int i = 0; i < city; i++) {
for (int j = 0; j < city; j++) {
if (dMap[i][j] != MAX) {
sb.append(cities[i][j].size()).append(" ");
for (Integer integer : cities[i][j]) {
sb.append(integer).append(" ");
}
} else sb.append("0");
sb.append("\n");
}
}
System.out.println(sb);
}
}
'๋ฐฑ์ค(boj)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA]2531 ํ์ ์ด๋ฐฅ (0) | 2023.08.10 |
---|---|
[JAVA]2230 ์ ๊ณ ๋ฅด๊ธฐ, ํฌ ํฌ์ธํฐ(๊ณจ๋5) (0) | 2023.08.09 |
[JAVA]๋ฐฑ์ค 13335 ํธ๋ญ Deque, queue (0) | 2023.07.31 |
[JAVA]18869 ๋ฉํฐ๋ฒ์ค2 , ์ขํ์์ถ (0) | 2023.07.28 |
[JAVA]1374 ๊ฐ์์ค (0) | 2023.07.16 |