https://www.acmicpc.net/problem/1389
정점별로 연걸된 나머지 정점까지의 거리의 합을 구하고, 그 합의 최솟값을 가지는 정점의 번호를 출력해주면 된다.
인접행렬을 만들 때, 방향성이 없는 그래프라는 것을 주의하자.
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 | #pragma warning(disable :4996) #include<iostream> #include<queue> using namespace std; int grp[101][101]; // 1-indexed int n, m; //유저수, 관계수 int dis[101]; //방문처리 + 거리 queue<int> q; void bfs(int st) { q.push(st); dis[st]++; while (!q.empty()) { int qs = q.size(); while (qs--) { int cur = q.front(); q.pop(); for (int i = 1; i <= n; i++) { if (grp[cur][i] != 1 || dis[i] >= 0) continue; q.push(i); dis[i] = dis[cur] + 1; } } } } int main(void) { ios::sync_with_stdio(false); cin.tie(0); cin >> n >> m; for (int i = 0; i < m; i++) { int src, dst; cin >> src >> dst; grp[src][dst] = 1; grp[dst][src] = 1; //무방향성 } int Min = 100000000, ans; for (int i = 1; i <= n; i++) { for (int i = 1; i <= n; i++) //방문처리 배열 초기화 dis[i] = -1; bfs(i); int Sum = 0; for (int i = 1; i <= n; i++) Sum += dis[i]; if (Sum < Min) { Min = Sum; ans = i; } } cout << ans; return 0; } | cs |
'알고리즘 문제 풀이 > 백준 온라인 저지' 카테고리의 다른 글
백준 10809번: 알파벳 찾기 (C++) (0) | 2019.09.25 |
---|---|
백준 1707번: 이분 그래프 (C++) (0) | 2019.09.25 |
백준 2644번: 촌수계산 (C++) (0) | 2019.09.25 |
백준 11724번: 연결 요소의 개수 (C++) (0) | 2019.09.25 |
백준 11403번: 경로 찾기 (C++) (0) | 2019.09.25 |