프로그래밍/문제풀이
[bfs] 백준 1389 케빈 베이컨의 6단계 법칙
하용권
2019. 3. 27. 19:28
https://www.acmicpc.net/problem/1389
1389번: 케빈 베이컨의 6단계 법칙
첫째 줄에 유저의 수 N (2 ≤ N ≤ 100)과 친구 관계의 수 M (1 ≤ M ≤ 5,000)이 주어진다. 둘째 줄부터 M개의 줄에는 친구 관계가 주어진다. 친구 관계는 A와 B로 이루어져 있으며, A와 B가 친구라는 뜻이다. A와 B가 친구이면, B와 A도 친구이며, A와 B가 같은 경우는 없다. 친구 관계는 중복되어 들어올 수도 있으며, 친구가 한 명도 없는 사람은 없다. 또, 모든 사람은 친구 관계로 연결되어져 있다.
www.acmicpc.net
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int main(){
vector<int> arr[101];
bool chk[101][101] = {0};
int sum[101] = {0};
int idx = 1;
int n,m,t1,t2;
cin >> n >> m;
for(int i = 1; i <= m; i++){
cin >> t1 >> t2;
arr[t1].push_back(t2);
arr[t2].push_back(t1);
}
for(int i = 1; i <= n; i++){
queue<int> q;
int cnt = 0;
q.push(i);
chk[i][i] = 1;
while(!q.empty()){
int q_size = q.size();
cnt +=1;
for(int k = 0; k < q_size; k++){
int tmp = q.front(); q.pop();
for(int j = 0; j < arr[tmp].size(); j++){
if(chk[i][arr[tmp][j]]) continue;
chk[i][arr[tmp][j]] = true;
sum[i] += cnt;
q.push(arr[tmp][j]);
}
}
}
if(sum[idx] > sum[i])
idx = i;
}
cout << idx;
}
반응형