const readline = require('readline');
let rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let input = [];
let N, M, S, E;
rl.on('line', (line) => {
input.push(line.split(' ').map(Number));
[N, M, S, E] = input[0];
if (input.length === M + 1) {
rl.close();
}
});
rl.on('close', () => {
const obj = {};
for (let i = 1; i <= M; ++i) {
const [u, v] = input[i];
if (!obj[u]) obj[u] = [];
if (!obj[v]) obj[v] = [];
obj[u].push(v);
obj[v].push(u);
}
for (let i = 1; i <= N; ++i) {
if ([S, E].includes(i)) {
console.log(-1);
continue;
}
const visited = Array(N + 1).fill(Infinity);
const q = [S];
visited[S] = 1;
while (q.length) {
const curr = q.shift();
if (!obj[curr]) continue;
for (const next of obj[curr]) {
if (next === i) continue;
if (visited[next] <= visited[curr] + 1) continue;
visited[next] = visited[curr] + 1;
if (next === E) break;
q.push(next);
}
}
console.log(visited[E] === Infinity ? -1 : visited[E]);
}
});
앞서 풀었던 문제랑 비슷한가 싶다가도 아니고... 어떻게 기우다가 테스트 케이스를 일부만 통과하게 됐다. 1시간 넘게 고민했으니 나머지는 내일...
09/08 해설 참조 후 추가
visited에 최소 이동 횟수를 갱신해나갈 생각은 전혀 못했다. 문제 정답률이 너무 높아서 약간 자괴감이 들긴 하는데... 아직 내 갈길이 멀긴 하다.