[Algorithm /백준] 1240 노드사이의 거리
2024. 1. 8. 12:00ㆍAlgorithm/JAVA
[문제]
N개의 노드로 이루어진 트리가 주어지고 M개의 두 노드 쌍을 입력받을 때 두 노드 사이의 거리를 출력하라.
[입력]
첫째 줄에 노드의 개수
N과 거리를 알고 싶은 노드 쌍의 개수
M이 입력되고 다음
N-1개의 줄에 트리 상에 연결된 두 점과 거리를 입력받는다. 그 다음 줄에는 거리를 알고 싶은
M개의 노드 쌍이 한 줄에 한 쌍씩 입력된다.
[출력]
M개의 줄에 차례대로 입력받은 두 노드 사이의 거리를 출력한다.
[문제 해결 - 플루이드 워셜]
import java.util.Scanner;
public class Main {
static int [][] arr;
static boolean []visited;
static int INF = Integer.MAX_VALUE/4;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
arr = new int[N+1][N+1];
visited = new boolean[N+1];
int M = sc.nextInt();
for(int i= 0; i < arr.length ; i++) {
for(int j = 0; j < arr.length ; j++) {
arr[i][j] = INF;
}
}
for(int i = 1 ; i < N ; i++) {
int node1 = sc.nextInt();
int node2 = sc.nextInt();
int distance = sc.nextInt();
arr[node1][node2] = distance;
arr[node2][node1] = distance;
}
floyd();
for(int i = 0 ; i < M ;i++) {
int fstNode = sc.nextInt();
int secNode = sc.nextInt();
System.out.println(arr[fstNode][secNode]);
}
}
public static void floyd() {
for(int k = 0 ; k < arr.length ; k++) {
for(int i =0 ; i < arr.length; i++) {
for(int j =0; j < arr.length ; j++) {
if(arr[i][k] >0 && arr[k][j] > 0) {
arr[i][j] = Math.min(arr[i][j], arr[i][k]+arr[k][j]);
}
}
}
}
}
}
+) 원래는 BFS/DFS로 카테고리 분류가 되어있던 문제였으나, 문제를 풀다보니 안풀려서 플로이드 워셜로 풀어버린...
하지만 플루이드 워셜의 경우 전체를 다 갱신하기에 숫자가 커지면 시간 초과가 발생할수 있을거 같기도 하다!
BFS혹은 DFS로 문제를 다시 풀어볼것
'Algorithm > JAVA' 카테고리의 다른 글
[Algorithm /백준] 7569 토마토 (1) | 2024.01.11 |
---|---|
[Algorithm /인프런] 12. 토마토(BFS 활용) , 7576 토마토 (0) | 2024.01.10 |
[Algorithm /백준] 11265 끝나지 않는 파티 (1) | 2024.01.07 |
[Algorithm /백준] 1389 케빈 베이컨의 6단계 법칙 (0) | 2024.01.06 |
[Algorithm /백준] 11403 경로 찾기 (1) | 2024.01.05 |