요르딩딩
백준 : 2644 (촌수 계산) (DFS) 본문
728x90
반응형
이번문제는 촌수 계산만 잘 적용하면, 기존 BFS 문제들과 비슷하다고 볼 수 있다.
if(visited[tmp] == false) { //아직방문전
dist[tmp] = dist[now]+1; // 촌수 계산
dfs(tmp, end); //재귀
}
import java.util.*;
class Main {
static int n, m, start, end;
static boolean[] visited;
static int[] dist;
static ArrayList<ArrayList<Integer>> graph = new ArrayList<ArrayList<Integer>>();
public static void dfs(int now, int end) {
visited[now] = true; //방문표시
for(int i=0; i< graph.get(now).size(); i++) {
int tmp = graph.get(now).get(i);
if(visited[tmp] == false) { //아직방문전
dist[tmp] = dist[now]+1; // 촌수 계산
dfs(tmp, end);
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
sc.nextLine();
String st = sc.nextLine();
String[] stArr = st.split(" ");
start = Integer.parseInt(stArr[0]);
end = Integer.parseInt(stArr[1]);
m = sc.nextInt();
sc.nextLine();
//초기화
visited = new boolean[n+1];
dist = new int[n+1];
for (int j = 0; j < n+1; j++) { //인덱스 0 사용안함 주의*****
graph.add(new ArrayList<Integer>());
}
//그래프 입력
for (int j = 0; j < m; j++) {
st = sc.nextLine();
stArr = st.split(" ");
int a = Integer.parseInt(stArr[0]);
int b = Integer.parseInt(stArr[1]);
graph.get(a).add(b);
graph.get(b).add(a); //양방향*****
}
dfs(start, end);
System.out.println(dist[end] == 0? -1 : dist[end]); //불가능 처리
}
}
728x90
반응형
'[코딩테스트] > 문제풀이' 카테고리의 다른 글
백준 : 1932 (정수 삼각형) (DP) (0) | 2022.03.29 |
---|---|
백준 : 5567 (결혼식) (BFS) (0) | 2022.03.28 |
백준 : 9205 (맥주마시면서 걸어가기) (BFS) (0) | 2022.03.28 |
백준 : 2468 (안전영역) (BFS) (0) | 2022.03.25 |
백준 : 2178 (미로탐색) (BFS) (0) | 2022.03.25 |
Comments