Skip to content

Commit da2f2f2

Browse files
authored
Merge pull request #1599 from AlgorithmWithGod/Ukj0ng
[20251206] BOJ / G2 / 환승 / 한종욱
2 parents 10271c3 + 7806b4d commit da2f2f2

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed

Ukj0ng/202512/06 BOJ G2 환승.md

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
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<Integer>[] edges;
9+
private static BitSet[] tubes;
10+
private static Set<Integer> start, end;
11+
private static boolean[] visited;
12+
private static int N, K, M;
13+
14+
public static void main(String[] args) throws IOException {
15+
init();
16+
int answer = N!=1 ? BFS() : 1;
17+
18+
bw.write(answer + "\n");
19+
bw.flush();
20+
bw.close();
21+
br.close();
22+
}
23+
24+
private static void init() throws IOException {
25+
StringTokenizer st = new StringTokenizer(br.readLine());
26+
N = Integer.parseInt(st.nextToken());
27+
K = Integer.parseInt(st.nextToken());
28+
M = Integer.parseInt(st.nextToken());
29+
30+
edges = new List[M];
31+
tubes = new BitSet[M];
32+
visited = new boolean[M];
33+
start = new HashSet<>();
34+
end = new HashSet<>();
35+
36+
for (int i = 0; i < M; i++) {
37+
edges[i] = new ArrayList<>();
38+
tubes[i] = new BitSet();
39+
}
40+
41+
for (int i = 0; i < M; i++) {
42+
st = new StringTokenizer(br.readLine());
43+
for (int j = 0; j < K; j++) {
44+
int num = Integer.parseInt(st.nextToken());
45+
tubes[i].set(num);
46+
if (num == 1) start.add(i);
47+
if (num == N) end.add(i);
48+
}
49+
}
50+
51+
for (int i = 0; i < M-1; i++) {
52+
for (int j = i+1; j < M; j++) {
53+
if (tubes[i].intersects(tubes[j])) {
54+
edges[i].add(j);
55+
edges[j].add(i);
56+
}
57+
}
58+
}
59+
}
60+
61+
private static int BFS() {
62+
Queue<int[]> q = new ArrayDeque<>();
63+
int result = -1;
64+
for (int s : start) {
65+
visited[s] = true;
66+
q.add(new int[]{s, 2});
67+
}
68+
69+
while (!q.isEmpty()) {
70+
int[] current = q.poll();
71+
72+
if (end.contains(current[0])) {
73+
result = current[1];
74+
break;
75+
}
76+
77+
for (int next : edges[current[0]]) {
78+
if (visited[next]) continue;
79+
visited[next] = true;
80+
q.add(new int[]{next, current[1]+1});
81+
}
82+
}
83+
84+
return result;
85+
}
86+
}
87+
```

0 commit comments

Comments
 (0)