Skip to content

Commit 2b4a0c3

Browse files
authored
[20251117] BOJ / G5 / 노드사이의 거리
1 parent 569569f commit 2b4a0c3

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
```
2+
import java.io.*;
3+
import java.util.*;
4+
5+
public class Main {
6+
private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
7+
private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
8+
private static List<int[]>[] edges;
9+
private static boolean[] visited;
10+
private static int N, M;
11+
public static void main(String[] args) throws IOException {
12+
init();
13+
14+
while (M-- > 0) {
15+
StringTokenizer st = new StringTokenizer(br.readLine());
16+
int start = Integer.parseInt(st.nextToken());
17+
int end = Integer.parseInt(st.nextToken());
18+
19+
bw.write(BFS(start, end) + "\n");
20+
}
21+
22+
bw.flush();
23+
bw.close();
24+
br.close();
25+
}
26+
27+
private static void init() throws IOException {
28+
StringTokenizer st = new StringTokenizer(br.readLine());
29+
N = Integer.parseInt(st.nextToken());
30+
M = Integer.parseInt(st.nextToken());
31+
32+
edges = new List[N+1];
33+
visited = new boolean[N+1];
34+
35+
for (int i = 1; i <= N; i++) {
36+
edges[i] = new ArrayList<>();
37+
}
38+
39+
for (int i = 0; i < N-1; i++) {
40+
st = new StringTokenizer(br.readLine());
41+
int x = Integer.parseInt(st.nextToken());
42+
int y = Integer.parseInt(st.nextToken());
43+
int d = Integer.parseInt(st.nextToken());
44+
45+
edges[x].add(new int[] {y, d});
46+
edges[y].add(new int[] {x, d});
47+
}
48+
}
49+
50+
private static int BFS(int start, int end) {
51+
Queue<int[]> q = new ArrayDeque<>();
52+
int result = -1;
53+
Arrays.fill(visited, false);
54+
visited[start] = true;
55+
q.add(new int[] {start, 0});
56+
57+
while (!q.isEmpty()) {
58+
int[] current = q.poll();
59+
60+
if (current[0] == end) {
61+
result = current[1];
62+
break;
63+
}
64+
65+
for (int[] edge : edges[current[0]]) {
66+
if (visited[edge[0]]) continue;
67+
68+
visited[edge[0]] = true;
69+
q.add(new int[]{edge[0], current[1]+edge[1]});
70+
}
71+
}
72+
73+
return result;
74+
}
75+
}
76+
```

0 commit comments

Comments
 (0)