문제 출처 : BOJ 1058 - 친구 https://www.acmicpc.net/problem/1058
1058번: 친구
지민이는 세계에서 가장 유명한 사람이 누구인지 궁금해졌다. 가장 유명한 사람을 구하는 방법은 각 사람의 2-친구를 구하면 된다. 어떤 사람 A가 또다른 사람 B의 2-친구가 되기 위해선, 두 사람
www.acmicpc.net
이 문제는 2-친구 수가 제일 많은 사람의 2-친구 수를 구하는 문제이다.
2-친구는 친구이거나 친구의 친구이면 된다.
깊이 우선 탐색으로 깊이가 2인 노드들까지만 방문하여
2-친구의 수를 계산해주면 되는 간단한 문제였다.
최종 코드
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
vector<int> v[51];
int visit[51];
int n, cnt, ans = 0;
void dfs(int cur, int depth) {
if (depth == 2) return;
for (int i = 0; i < v[cur].size(); i++) {
int next = v[cur][i];
if (visit[next]) dfs(next, depth + 1);
else {
visit[next] = 1;
cnt++;
dfs(next, depth + 1);
}
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> n;
char c;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> c;
if (c == 'Y') v[i].push_back(j);
}
}
for (int i = 0; i < n; i++) {
memset(visit, 0, sizeof(visit));
cnt = 0;
visit[i] = 1;
dfs(i, 0);
ans = max(ans, cnt);
}
cout << ans << '\n';
return 0;
}
'BOJ' 카테고리의 다른 글
(C++) BOJ/백준 3584 - 가장 가까운 공통 조상 (0) | 2021.09.28 |
---|---|
(C++) BOJ/백준 1780 - 종이의 개수 (0) | 2021.09.27 |
(C++) BOJ/백준 1120 - 문자열 (0) | 2021.09.27 |
(C++) BOJ/백준 1699 - 제곱수의 합 (0) | 2021.09.26 |
(C++) BOJ/백준 2230 - 수 고르기 (0) | 2021.05.09 |