๐ [๋ฐฑ์ค์๊ณ ๋ฆฌ์ฆ ํ์ด] Q.1956 ์ด๋ ๋ฌธ์ ํ์ด
๐ ๋ฌธ์
https://www.acmicpc.net/problem/1956
V๊ฐ์ ๋ง์์ E๊ฐ์ ๋๋ก๋ก ๊ตฌ์ฑ๋์ด ์๋ ๋์๊ฐ ์๋ค. ๋๋ก๋ ๋ง์๊ณผ ๋ง์ ์ฌ์ด์ ๋์ฌ ์์ผ๋ฉฐ, ์ผ๋ฐฉ ํตํ ๋๋ก์ด๋ค.
๋ง์์๋ ํธ์์ 1๋ฒ๋ถํฐ V๋ฒ๊น์ง ๋ฒํธ๊ฐ ๋งค๊ฒจ์ ธ ์๋ค๊ณ ํ์.
๋น์ ์ ๋๋ก๋ฅผ ๋ฐ๋ผ ์ด๋์ ํ๊ธฐ ์ํ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ผ๋ ค๊ณ ํ๋ค. ์ด๋์ ํ ํ์๋ ๋ค์ ์์์ ์ผ๋ก ๋์์ค๋ ๊ฒ์ด ์ข๊ธฐ ๋๋ฌธ์, ์ฐ๋ฆฌ๋ ์ฌ์ดํด์ ์ฐพ๊ธฐ๋ฅผ ์ํ๋ค.
๋จ, ๋น์ ์ ์ด๋์ ๋งค์ฐ ๊ท์ฐฎ์ํ๋ฏ๋ก, ์ฌ์ดํด์ ์ด๋ฃจ๋ ๋๋ก์ ๊ธธ์ด์ ํฉ์ด ์ต์๊ฐ ๋๋๋ก ์ฐพ์ผ๋ ค๊ณ ํ๋ค.
๋๋ก์ ์ ๋ณด๊ฐ ์ฃผ์ด์ก์ ๋, ๋๋ก์ ๊ธธ์ด์ ํฉ์ด ๊ฐ์ฅ ์์ ์ฌ์ดํด์ ์ฐพ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋ ๋ง์์ ์๋ณตํ๋ ๊ฒฝ์ฐ๋ ์ฌ์ดํด์ ํฌํจ๋จ์ ์ฃผ์ํ๋ค.
๐ ์ ๊ทผ๋ฒ
boj Q.1956 ์ด๋ ๋ฌธ์ ์ ๋๋ค.
์ด๋์ ์ํด ์์์ ์ผ๋ก๋ถํฐ ์ถ๋ฐํด ๋ค์ ์์์ ์ผ๋ก ๋์์์ผ ํฉ๋๋ค.
๊ทธ ์ค์์๋ ๊ฐ์ฅ ์ต์์ ๊ธธ์ด์ธ ์ฌ์ดํด์ ์ฐพ์์ผํฉ๋๋ค.
๋ชจ๋ ์ง์ ์ ๋ํด์ ์ฌ์ดํด์ ํ์ธํด์ผํ๋ฏ๋ก
ํ๋ก์ด๋ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ์ฌ ํ์ด๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
ํ๋ก์ด๋ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ์ฌ ๋ชจ๋ ์์์ ๋ถํฐ ๋ชจ๋ ์ ์ ๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ ํ
์์์ ๊ณผ ๋์ฐฉ์ ์ด ๊ฐ์ ์ง์ ์ ๊ฑฐ๋ฆฌ๋ค์ ๋น๊ตํ๋ฉด
๋๋ก์ ๊ธธ์ด์ ํฉ์ด ๊ฐ์ฅ ์์ ์ฌ์ดํด์ ์ฐพ์ ์ ์์ต๋๋ค.
๐ป ์ฝ๋
package problem.shortest.floyd.Q1956;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main_1956 {
static int V ,E;
static int[][] graph;
static int INF = 1000000;
static int min = INF;
public static void main(String[] args) throws IOException {
input();
solve();
if(min==INF)
System.out.println(-1);
else
System.out.println(min);
}
private static void input() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String temp[] = br.readLine().split(" ");
V = Integer.parseInt(temp[0]);
E = Integer.parseInt(temp[1]);
graph = new int[V + 1][V + 1];
for(int i=0; i<graph.length; i++) {
Arrays.fill(graph[i], INF);
}
for(int i = 0; i< E; i++){
temp = br.readLine().split(" ");
int start = Integer.parseInt(temp[0]);
int end = Integer.parseInt(temp[1]);
int cost = Integer.parseInt(temp[2]);
graph[start][end] = cost;
}
br.close();
}
private static void solve(){
floyd();
for(int i=1; i<=V; i++) {
min = Math.min(min, graph[i][i]);
}
}
private static void floyd() {
for(int k = 1; k<= V; k++){
for(int i = 1; i<= V; i++){
for(int j = 1; j<= V; j++){
graph[i][j] = Math.min(graph[i][j],graph[i][k]+graph[k][j]);
}
}
}
}
}