-
[C++] 백준 1389번. 케빈 베이컨의 6단계 법칙코딩테스트/코딩테스트 연습 2020. 10. 27. 18:16728x90
(30분) 가중치 없는 간선의 최소 거리는 queue만 사용하면 됨
#include<iostream> #include<vector> #include<queue> using namespace std; int arr[101][101]; int N, M; int find_step(int start, int target) { queue<pair<int, int>> q; for (int j = 1; j <= N; j++) { if (arr[start][j] == 1) { q.push(make_pair(j, 1)); } } while (!q.empty()) { int index = q.front().first; int step = q.front().second; q.pop(); if (index == target) return step; for (int j = 1; j <= N; j++) { if (arr[index][j] == 1) { q.push(make_pair(j, step + 1)); } } } } int main() { cin >> N >> M; for (int m = 0; m < M; m++) { int a, b; cin >> a >> b; arr[a][b] = 1; arr[b][a] = 1; } for (int i = 1; i < N; i++) { for (int j = i + 1; j <= N; j++) { if (arr[i][j] == 0) { int value = find_step(i, j); arr[i][j] = value; arr[j][i] = value; } } } int min_step = 99999999; for (int i = 1; i <= N; i++) { int step = 0; for (int j = 1; j <= N; j++) { step += arr[i][j]; } if (min_step > step) min_step = step; } for (int i = 1; i <= N; i++) { int step = 0; for (int j = 1; j <= N; j++) { step += arr[i][j]; } if (min_step == step) { cout << i << endl; break; } } return 0; }
728x90'코딩테스트 > 코딩테스트 연습' 카테고리의 다른 글
[C++] [프로그래머스 2020 KAKAO] 기둥과 보 설치 (0) 2020.10.27 [C++] 삼성 2477. [모의 SW 역량테스트] 차량 정비소 (0) 2020.10.27 [C++] 삼성 4014. [모의 SW 역량테스트] 활주로 건설 (0) 2020.10.27 [C++] 백준 9372번. 상근이의 여행 (0) 2020.10.27 [C++] 삼성 1952. [모의 SW 역량테스트] 수영장 (0) 2020.10.27