No Rules Rules

케빈 베이컨의 6단계 법칙 (feat. 백준, 1389번) 본문

생활/코테

케빈 베이컨의 6단계 법칙 (feat. 백준, 1389번)

개발하는 완두콩 2022. 10. 24. 12:32
728x90
반응형

케빈 베이컨의 6단계 법칙
https://www.acmicpc.net/problem/1389

 

1389번: 케빈 베이컨의 6단계 법칙

첫째 줄에 유저의 수 N (2 ≤ N ≤ 100)과 친구 관계의 수 M (1 ≤ M ≤ 5,000)이 주어진다. 둘째 줄부터 M개의 줄에는 친구 관계가 주어진다. 친구 관계는 A와 B로 이루어져 있으며, A와 B가 친구라는 뜻

www.acmicpc.net

 

// woohyeon.kim
// kim519620.tistory.com
#include <iostream>
#include <set>
#include <queue>
#include <algorithm>
using namespace std;
set<int> arr[101];
set<pair<int, int>> ans;
int bfs(register int i, register int j){
    bool visit[101]{false};
    queue<pair<int, int>> q;
    q.push(make_pair(i, 0));
    visit[i] = true;
    while(!q.empty()){
        auto p = q.front(); q.pop();
        auto n = p.first, c = p.second;
        for(auto iter = arr[n].begin(); iter != arr[n].end(); ++iter)
            if(!visit[*iter]){
                visit[*iter] = true;
                if(*iter == j)
                    return c + 1;
                q.push(make_pair(*iter, c + 1));
            }
    }
    return 0;
}
int main(){
    ios::sync_with_stdio(false), cin.tie(NULL);
    register int N, M;
    cin >> N >> M;
    for(register int m = 1, a, b; m <= M; ++m)
        cin >> a >> b, arr[a].insert(b), arr[b].insert(a);
    for(register int i = 1, j, v; i <= N; ++i){
        v = 0;
        for(j = 1; j <= N; ++j)
            v += bfs(i, j);
        ans.insert(make_pair(v, i));
    }
    cout << ans.begin()->second;
    return 0;
}
// *&)*@*

 

반응형
  1. A-B를 모두 연결시켜줍니다. 만약 1-2, 2-3, 3-4 로 연결되어 있고 1에서 4에 도착하는 최단거리는 3회가 됩니다. (1->2->3->4 이기 때문입니다.)
  2. 따라서 bfs를 이용하여 다음 depth로 +1씩 증가시키면서 4가 나올때까지의 최단거리를 찾아주면 됩니다.
728x90
반응형

'생활 > 코테' 카테고리의 다른 글

대표값2 (feat. 백준, 2587번)  (0) 2022.10.25
막대기 (feat. 백준, 1094번)  (0) 2022.10.25
최댓값 (feat. 백준, 2566번)  (0) 2022.10.24
주몽 (feat. 백준, 1940번)  (0) 2022.10.21
그릇 (feat. 백준, 7567번)  (0) 2022.10.21
Comments