SSONG Cloud

[백준] 1240 노드사이의 거리 본문

Algorithm/백준

[백준] 1240 노드사이의 거리

SSONGMI 2022. 3. 6. 17:54
반응형

문제 출처: https://www.acmicpc.net/problem/1240

 

 

 

1. 입력

: 첫째 줄에 노드의 개수 N이 입력되고 다음 N-1개의 줄에 트리 상에 연결된 두 점과 거리(10,000 이하의 정수)를 입력받는다.

: 그 다음 줄에는 거리를 알고 싶은 M개의 노드 쌍이 한 줄에 한 쌍씩 입력된다.

 

 

2. 결과

: M개의 줄에 차례대로 입력받은 두 노드 사이의 거리를 출력한다.

 

 

3. 풀이

: 노드사이의 최단 거리를 찾는 문제로 플로이드 와샬 알고리즘을 적용할 수 있다.

: 배열을 생성한 후 노드사이의 거리를 입력받는다.

: 서로 연결되지 않은 노드의 거리를 큰 수로 바꿔준다.

: 중간지점을 연결해가며 최단 거리를 구한다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	static StringBuilder sb = new StringBuilder();
	static StringTokenizer st;
	static final int INF = 99999999;
	public static void main(String[] args) throws IOException {
		st = new StringTokenizer(br.readLine());
		int N = Integer.parseInt(st.nextToken());
		int M = Integer.parseInt(st.nextToken());
		
		int[][] arr = new int[N+1][N+1];
		
		
		for(int i = 0, len = N-1; i < len; i++) {
			st = new StringTokenizer(br.readLine());
			int node1 = Integer.parseInt(st.nextToken());
			int node2 = Integer.parseInt(st.nextToken());
			int dist = Integer.parseInt(st.nextToken());
			arr[node1][node2] = dist;
			arr[node2][node1] = dist;
		}
		
		for(int i = 1; i < N+1; i++) {
			for(int j = 1; j < N+1; j++) {
				if(i != j && arr[i][j] == 0) {
					arr[i][j] = INF;
				}
			}
		}
		
		for(int k = 1; k < N+1; k++) {
			for(int i = 1; i < N+1; i++ ) {
				if(i == k) continue;
				for(int j = 1; j < N+1; j++) {
					if(i != j && k != j) {
						arr[i][j] = Math.min(arr[i][j], arr[i][k] + arr[k][j]); 
					}
				}
			}
		}
		
		for(int i = 0; i < M; i++) {
			st = new StringTokenizer(br.readLine());
			int node1 = Integer.parseInt(st.nextToken());
			int node2 = Integer.parseInt(st.nextToken());
			sb.append(arr[node1][node2]).append("\n");
		}
		
		System.out.println(sb);
	}

}
반응형

'Algorithm > 백준' 카테고리의 다른 글

[백준] 1027 고층 건물 JS  (0) 2024.02.15
[백준] 2234 성곽  (0) 2022.03.12
[백준] 13565 침투  (0) 2021.07.11
[백준] 2947 나무 조각  (0) 2021.06.28
[백준] 1388 바닥장식  (0) 2021.06.25
Comments