728x90
본 알고리즘 풀이는 Routine Study에서 진행하고 있습니다.
저를 포함한 구성원이 대부분 초보이므로, 원하시는분은 언제라도 들어오셔도 좋습니다.
문의는 댓글 바람.
문제 출처 : https://www.acmicpc.net/problem/2644
[문제 설명]
촌수 구하기
[접근 방법]
BFS로 걸리는 거리가 촌수다.
[내 답안 수정하기]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int numOfFamily = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine()," ");
int targetParrent = Integer.parseInt(st.nextToken());
int targetChild = Integer.parseInt(st.nextToken());
List<List<Integer>> relations = new ArrayList<>();
int cntOfRelations = Integer.parseInt(br.readLine());
boolean[][] visited = new boolean[numOfFamily+1][numOfFamily+1];
for (int i = 0; i <= numOfFamily; i++) { relations.add(new ArrayList<>());}
for (int realationNo = 1; realationNo <= cntOfRelations; realationNo++) {
st = new StringTokenizer(br.readLine(), " ");
int parent = Integer.parseInt(st.nextToken());
int child = Integer.parseInt(st.nextToken());
relations.get(parent).add(child);
relations.get(child).add(parent);
}
Queue<List<Integer>> queue = new LinkedList<>();
queue.offer(relations.get(targetParrent));
int range = 1;
while(!queue.isEmpty()) {
int size = queue.size();
while (size-- > 0) {
List<Integer> temp = queue.poll();
for (int familyNo : temp) {
if (familyNo == targetChild) {
System.out.println(range);
return;
}
if (!visited[familyNo][targetChild]) {
queue.offer(relations.get(familyNo));
}
visited[familyNo][targetChild] = true;
visited[targetChild][familyNo] = true;
}
}
range++;
}
System.out.println(-1);
}
}
728x90
반응형
'알고리즘 문제 풀이 > BFS' 카테고리의 다른 글
백준 - 토마토(Kotlin) (0) | 2022.03.30 |
---|---|
백준 - 나이트의 이동 (0) | 2022.01.04 |
404. Sum of Left Leaves (0) | 2021.09.09 |
463. Island Perimeter (0) | 2021.09.01 |
965. Univalued Binary Tree (0) | 2021.09.01 |