1956번: 운동
첫째 줄에 V와 E가 빈칸을 사이에 두고 주어진다. (2 ≤ V ≤ 400, 0 ≤ E ≤ V(V-1)) 다음 E개의 줄에는 각각 세 개의 정수 a, b, c가 주어진다. a번 마을에서 b번 마을로 가는 거리가 c인 도로가 있다는 의
www.acmicpc.net
플로이드 워샬?셜? 저번에 해서 안 하려 했는데
쪕..고냥 했슴니당..
package baekjoon;
import java.io.*;
import java.util.*;
public class b1956 {
static final int INF = 987654321;
static Queue <Integer> queue = new LinkedList<>();
static boolean visited[];
static int arr[][];
static int v;
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
v = Integer.parseInt(st.nextToken());
int e = Integer.parseInt(st.nextToken());
arr = new int[v][v];
visited = new boolean[v];
for(int i = 0 ; i < v ; i++)
{
Arrays.fill(arr[i], INF);
}
for(int i = 0 ; i < v ; i++)
{
arr[i][i] = 0;
}
for(int i = 0 ; i < e ; i++)
{
st = new StringTokenizer(br.readLine());
int row = Integer.parseInt(st.nextToken())-1;
int col = Integer.parseInt(st.nextToken())-1;
int cost = Integer.parseInt(st.nextToken());
arr[row][col] = cost;
}
for(int i = 0 ; i < v ; i++)
{
for(int j = 0 ; j < v ; j++)
{
for(int k = 0 ; k < v ; k++)
{
arr[j][k] = Math.min(arr[j][k], arr[j][i]+arr[i][k]);
}
}
}
int ans = INF;
for (int i = 0; i < v; i++) {
for (int j = 0; j < v; j++) {
if(i == j)
continue;
if (arr[i][j] != INF && arr[j][i] != INF) {
ans = Math.min(ans, arr[i][j] + arr[j][i]);
}
}
}
ans = ans == INF ? -1 : ans;
bw.write(ans+"");
bw.close();
}
}
사이클 생기는 거를 어떻게 처리해야하나 고민하다가 첨에 bfs로 했는데 bfs로 하면 갈 수 있는 경로 쭉 다 세지니까
(구글링) ij ji로 본인에게 가는 경우가 있나 저런식으로 했슴니다 어찌보면 당연한건데 ㅠㅡㅠ 반성하겠습니다 ㅠ
INF 충분히 키워야해요 저거때메 틀렸습니다 계속 뜸 ㅠㅠ
'BOJ' 카테고리의 다른 글
[JAVA]백준 1092번 - 배 (0) | 2023.07.18 |
---|---|
[JAVA]백준 1068번 - 트리 (2) | 2023.07.17 |
[JAVA]백준 6198번 - 옥상 정원 꾸미 (2) | 2023.07.15 |
[JAVA] 백준 2109번 -순회강연 (0) | 2023.07.14 |
[JAVA]백준 12904번 - A와 B (0) | 2023.07.13 |
댓글