[BJ2644] 촌수계산
✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺/백준 알고리즘

[BJ2644] 촌수계산

 백준 - 촌수계산 

문제 링크

https://www.acmicpc.net/problem/2644

 

2644번: 촌수계산

사람들은 1, 2, 3, …, n (1 ≤ n ≤ 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어

www.acmicpc.net

 

문제 입출력

9
7 3
7
1 2
1 3
2 7
2 8
2 9
4 5
4 6
3

 

문제 풀이

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Queue;
import java.util.StringTokenizer;

/*
 * 주의
 * - 두사람의 친척관계가 전혀없을 때는 -1 출력 
 * */


// N: 사람 수
// A, B: 구해야하는 
public class Main {
	static int ans, N, A, B, M;
	static int[][] matrix = new int[101][101];

	static Queue<Integer> q = new ArrayDeque<>();


	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		N = Integer.parseInt(br.readLine());

		StringTokenizer st = new StringTokenizer(br.readLine());
		A = Integer.parseInt(st.nextToken());
		B = Integer.parseInt(st.nextToken());

		M = Integer.parseInt(br.readLine());
		for (int i = 0; i < M; i++) {
			st = new StringTokenizer(br.readLine());
			int from = Integer.parseInt(st.nextToken());
			int to = Integer.parseInt(st.nextToken());
			matrix[from][to] = 1;
			matrix[to][from] = 1;
		}

		// 초기화
		ans = -1;

		// 탐색
		bfs(A);

		// 출력
		System.out.println(ans);

	} // end main


	private static void bfs(int s) {
		q.offer(s);
		matrix[s][0] = 1;

		int dep = 0;
		while (!q.isEmpty()) {
			int size = q.size();

			for (int i = 0; i < size; i++) {
				int cur = q.poll();
				// System.out.println(cur);

				if (cur == B) {
					ans = dep;
					return;
				}

				for (int j = 1; j <= 100; j++) {
					if (matrix[j][0] == 1) continue;
					if (matrix[cur][j] == 0) continue;

					q.offer(j);
					matrix[j][0] = 1;
				}
			}

			dep++;
		}
	} // end bfs

}
  • dfs 를 이용해 depth 를 셉니다.
  • 따라서 q의 size 만큼 돌아줍니다.
  • 만약 촌수를 계산해야하는 노드까지 가면 멈춥니다.

 

 

 

 

 

 

 

 

 

# 백준 촌수계산 bfs


 

728x90

'✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺 > 백준 알고리즘' 카테고리의 다른 글

[BJ7576] 토마토  (0) 2022.09.19
[BJ9205] 맥주 마시면서 걸어가기  (0) 2022.09.19
[BJ2469] 안전 영역  (0) 2022.09.17
[BJ2573] 빙산  (0) 2022.09.17
[BJ1759] 암호 만들기  (0) 2022.09.12