코드
#include <iostream>
#include <queue>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
int n, m,a,b, visited[103],res=987654321,resnum;
vector<int> adj[103];
// bfs
int bfs(int x) {
fill(visited, visited + 103, 0);
queue<int> q;
q.push(x);
visited[x] = 1;
while (!q.empty()) {
int pn = q.front();
q.pop();
for (int i : adj[pn]) {
if (!visited[i]) {
visited[i] = visited[pn] + 1;
q.push(i);
}
}
}
int tmp = 0;
for (int i = 1; i < n + 1; i++) tmp += visited[i] - 1;
return tmp;
}
int main() {
cin >> n >> m;
for (int i = 0; i < m; i++) {
cin >> a >> b;
adj[a].push_back(b);
adj[b].push_back(a);
}
for (int i = 1; i < n + 1; i++) {
int tmpnum = bfs(i);
if (tmpnum < res) {
res = tmpnum;
resnum = i;
}
}
cout << resnum << '\n';
return 0;
}
풀이
케빈 베이컨 수를 구하는 문제였다. 케빈 베이컨 수가 가장 적은 사람을 구하는 문제라서 해당 사람에게 최단거리로 도달할 수 있어야 한다. 그래서 bfs를 사용했다. bfs로 케빈 베이컨 수를 구하고 이것이 가장 작은 사람을 찾아 출력하면 되는 문제.
'백준' 카테고리의 다른 글
[백준] 10819번 차이를 최대로 C++ 코드 (3) | 2024.11.05 |
---|---|
[백준] 9370번 미확인 도착지 C++ 코드 (2) | 2024.10.17 |
[백준] 18111번 마인크래프트 C++ 코드 (0) | 2024.10.17 |
[백준] 2630번 색종이 만들기 C++ 코드 (0) | 2024.10.17 |
[백준] 11057번 오르막 수 C++ 코드 (0) | 2024.10.17 |