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 |