1. ๋ฌธ์ ์ค๋ช
2. ์ ๊ทผ ๋ฐฉ์
- ์ธ์ ๋ฆฌ์คํธ๋ก ๊ทธ๋ํ๋ฅผ ๊ตฌํํ๋ค. (์ธ์ ๋ฆฌ์คํธ ๊ตฌํ ๋ฐฉ๋ฒ: ๋งํฌ)
- DFS๋ก ์์์ ์ ์์ ๋ชฉํ ์ ์ ์ ์ฐพ์ ๋๊น์ง ์ฌ๊ทํ๋ค.
- ๋ชฉํ ์ ์ ์ ์ฐพ์์ ๋ ์ฌ๊ท์ Depth๊ฐ ๋ฐ๋ก, ๋ต์ด๋ค. DFS๋ฅผ ๋์๋ ๊ฐ์ ์ฐพ์ง ๋ชปํ๋ ๊ฒฝ์ฐ์๋ -1์ ์ถ๋ ฅํ๋ค.
3. ์ฝ๋ ๋ถ์
import java.io.*;
import java.util.*;
public class Main {
// ๊ฐ๊ฐ ์ ์ ๊ฐ์, ํ์ธํด์ผํ ๋
ธ๋ 2๊ฐ, ๊ฐ์ ๊ฐ์
static int N, me, cousin, M;
static boolean foundAns = false;
static ArrayList<Integer> [] lists;
static boolean [] isVisited;
public static void main(String[] args) throws IOException {
// ์
๋ ฅ ๋ฐ๊ธฐ
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
me = Integer.parseInt(st.nextToken());
cousin = Integer.parseInt(st.nextToken());
M = Integer.parseInt(br.readLine());
lists = new ArrayList[N+1];
isVisited = new boolean[N+1]; isVisited[me] = true;
for (int i = 1; i <=N ; i++) {
lists[i] = new ArrayList<>();
}
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
lists[start].add(end);
lists[end].add(start);
}
dfs(0, me);
if (!foundAns) {
System.out.println(-1);
}
}
public static void dfs(int depth, int now) {
// 1. ๊ธฐ์ ์กฐ๊ฑด
if(now == cousin) {
System.out.println(depth);
foundAns = true;
return;
}
// 2. ๊ณ์ฐ ์กฐ๊ฑด
for (int i = 0; i < lists[now].size(); i++) {
int next = lists[now].get(i);
if(!isVisited[next]) {
isVisited[next] = true;
dfs(depth+1, next);
if(foundAns) return;
isVisited[next] = false;
}
}
}
}
4. ์ฑ์ฅ ํ๊ธฐ
#1
๋ฌธ์ ๋ฅผ ๋ค ์ฝ์ง ์๊ณ ํ์ด์, ๋ชป ์ฐพ์ผ๋ฉด -1 ์ถ๋ ฅ์ ๊ตฌํ ์ํ๋ค. ๊ทธ๊ฑฐ ๋๋ฌธ์ ํค๋งธ๋ค.
#2
DFS ๋ ๋, ์์ ์ ์ ์ ๋ฐฉ๋ฌธ ์ฒดํฌ ์ํด์ ์๋ํ์ง ์๋ ์์๊ฐ ๋ช ๊ฐ ์์๋ค. ๊ทธ๊ฑฐ ๋๋ฌธ์๋ ํค๋งธ๋ค.
0