본문 바로가기
📊알고리즘/BOJ

[BOJ 2644] 촌수 계산

by meteorfish 2023. 3. 31.
728x90

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

 

2644번: 촌수계산

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

www.acmicpc.net


전형적인 BFS 문제이다.

처음에 문제를 잘못 접근했다.

1부터 시작해서 target1과 target2의 촌수를 구해서 서로 더하면 된다고 생각했다.

그러나 다음 예외가 존재한다.

3
2 3
2
1 2
2 3

target1과 target2가 겹치기 때문에 값이 오류가 발생한다.

 

따라서, 시작점을 target1으로 시작해서 각 촌수를 구한 다음, target2의 촌수를 출력하면 된다.

 

 [ 코드 보기 ]

더보기
#include <iostream>
#include <vector>
#include <queue>

using namespace std;

int n, t1, t2, m, a, b;
int arr[101][101];
int res[101];
int diff[101];
queue<int> q;



void bfs(int x,int idx) {
	q.push(x);
	
	while (!q.empty()) {
		int cur = q.front();
		q.pop();

		for (int i = 1; i <= n; i++) {
			
			if (arr[cur][i] == 1 && res[i]==0) {
				//cout << "cur: " << cur << endl;
				res[i] = res[cur]+1;
				diff[i]=idx;
				q.push(i);
			}
		}
	}

}

int main() {
	cin >> n;
	cin >> t1 >> t2;
	cin >> m;
	for (int i = 0; i < m; i++) {
		cin >> a >> b;
		arr[a][b] = 1;
		arr[b][a] = 1;
	}

	int idx = 0;

	bfs(t1, idx++);
	
	
	if (res[t2] == 0)
		cout << -1;
	else
		cout << res[t2];
		
	
}

 

728x90

'📊알고리즘 > BOJ' 카테고리의 다른 글

[👊DP뿌시기 #1] (BOJ 11726) 2 X N 타일링  (0) 2023.08.14
[BOJ 1240] 노드사이의 거리  (0) 2023.07.04
[BOJ 1941] 소문난 칠공주  (0) 2023.03.28
BOJ 9184] 신나는 함수 실행  (0) 2022.12.27
BOJ 1021] 회전하는 큐  (1) 2022.12.23