반응형
문제 링크 : www.acmicpc.net/problem/2644
2644번: 촌수계산
사람들은 1, 2, 3, …, n (1≤n≤100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어진
www.acmicpc.net

> 풀이
간단한 그래프 탐색 문제입니다. 간단한 그래프를 표현하는데에는 인접리스트 (벡터 이용) 를 사용하는걸 좋아합니다.
탐색은 bfs로 탐색했습니다.
#include <bits/stdc++.h>
using namespace std;
vector<int> person[101];
queue<pair<int, int>> bfs;
bool visited[101];
int N, T;
int main(void) {
int p1, p2, n1, n2;
int res = -1;
scanf("%d", &N);
scanf("%d %d", &p1, &p2);
scanf("%d", &T);
for (int i = 0; i < T; i++) {
scanf("%d %d", &n1, &n2);
person[n1].push_back(n2);
person[n2].push_back(n1);
}
bfs.push({p1, 0});
visited[p1] = true;
while (!bfs.empty()) {
auto a = bfs.front();
bfs.pop();
int p = a.first, cnt = a.second;
int size = person[p].size();
if (p2 == p) {
res = cnt;
break;
}
if (size == 0)
continue;
for (int i = 0; i < size; i++) {
int tmp = person[p][i];
if (visited[tmp]) continue;
visited[tmp] = true;
bfs.push({tmp, cnt + 1});
}
}
printf("%d", res);
return 0;
}
반응형
'알고리즘 (백준)' 카테고리의 다른 글
백준 5014 ( 스타트링크 ) / C++ (0) | 2021.07.14 |
---|