문제풀이/백준oj
[백준oj] 1389번 케빈 베이컨의 6단계 법칙
Hyeon-Uk
2020. 12. 29. 19:05
반응형
1389번: 케빈 베이컨의 6단계 법칙
첫째 줄에 유저의 수 N (2 ≤ N ≤ 100)과 친구 관계의 수 M (1 ≤ M ≤ 5,000)이 주어진다. 둘째 줄부터 M개의 줄에는 친구 관계가 주어진다. 친구 관계는 A와 B로 이루어져 있으며, A와 B가 친구라는 뜻
www.acmicpc.net
모든 정점에 대해 bfs를 수행하며 해당 정점으로부터의 거리를 모두 더해준값들을 배열에 저장한뒤, 최소값을 찾아 출력해주면 된다.
#include<iostream>
#include <algorithm>
#include<vector>
#include<queue>
using namespace std;
vector<int> v[101];
int n, m;
int dist[101];
bool visited[101];
int result[101];
void bfs(int st) {
//bfs전 초기화
for (int i = 0; i <= n; i++) {
visited[i] = false;
dist[i] = 0;
}
queue<int> q;
q.push(st);
visited[st] = true;
while (!q.empty()) {
int now = q.front();
q.pop();
for (int i = 0; i < v[now].size(); i++) {
int next = v[now][i];
if (!visited[next]) {
visited[next] = true;
dist[next] = dist[now] + 1;
q.push(next);
result[st] += dist[next];
}
}
}
}
int main() {
cin >> n >> m;
for (int i = 0; i < m; i++) {
int from, to;
cin >> from >> to;
v[from].push_back(to);
v[to].push_back(from);
}
for (int i = n; i >=1; i--) {
bfs(i);
}
int Min = result[n];
int mini = n;
for (int i = n - 1; i >= 1; i--) {
if (Min >= result[i]) {
mini = i;
Min = result[i];
}
}
cout << mini;
return 0;
}
반응형