티스토리 뷰

https://www.acmicpc.net/problem/1389


[ 나의 해결법 ]

다익스트라 알고리즘을 이용해서 문제를 풀었다. 사람1을 시작해서 다익스트라 알고리즘을 진행하면, 사람1과 다른 사람들과의 최단거리를 배열 dist에 구할 수 있다. 배열 dist의 모든 원소를 더하면 사람1의 케빈 베이컨의 값이 나온다.

이런 식으로 사람1부터 N명까지 진행하면서 케빈 베이컨 값이 최소의 유저를 찾으면 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <iostream>
#include <vector>
#include <queue>
 
#define MAX 101
#define INF 99999999
 
using namespace std;
 
int N, M;
vector<pair<int, int>> adj[MAX];
 
void InData()
{
    cin >> N >> M;
    for (int i = 0; i < M; i++)
    {
        int src, dst;
        cin >> src >> dst;
        adj[src].push_back(make_pair(dst, 1));
        adj[dst].push_back(make_pair(src, 1));
    }
}
 
int Dikstra(int node)
{
    priority_queue<pair<int, int>> pq;
    vector<int> dist(MAX, INF);
 
    dist[node] = 0;
    pq.push(make_pair(0,node));
 
    while (!pq.empty())
    {
        int min_dist = -pq.top().first;
        int min_node = pq.top().second;
        pq.pop();
 
        for (int v = 0; v < adj[min_node].size(); v++)
        {
            int next_node = adj[min_node][v].first;
            int next_dist = min_dist + adj[min_node][v].second;
            if (next_dist < dist[next_node]) {
                dist[next_node] = next_dist;
                pq.push(make_pair(-next_dist, next_node));
            }
        }
    }
 
    int ret = 0;
    for (int i = 1; i <= N; i++)
        ret += dist[i];
    return ret;
}
 
int main()
{
    int kevin;
    int min_kevin = INF, min_node;
 
    InData();
 
    for (int v = 1; v <= N; v++)
    {
        kevin = Dikstra(v);
        if (kevin < min_kevin)
        {
            min_kevin = kevin;
            min_node = v;
        }
    }
 
    cout << min_node << endl;
    return 0;
}


'알고리즘 > 다익스트라 최단거리' 카테고리의 다른 글

백준_플로이드  (0) 2016.09.22
백준_파티  (0) 2016.07.02
백준_ 최소비용구하기  (0) 2016.06.28
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함