PS (C, C++)
[백준/C++] 1058 친구
최연재
2024. 11. 9. 23:59
https://www.acmicpc.net/problem/1058
코드
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
#define MAX 51
#define FASTIO ios::sync_with_stdio(false); cin.tie(NULL);
typedef pair<int, int> pi;
int n, ans;
char arr[MAX][MAX];
bool visit[MAX];
void bfs(int s) {
queue<pi> q;
q.push({ s, 0 });
visit[s] = 1;
int cnt = 0;
while (!q.empty()) {
int now = q.front().first;
int d = q.front().second;
q.pop();
if (d > 1) continue;
for (int i = 0; i < n; i++) {
if (arr[now][i] == 'Y' && visit[i] == 0) {
visit[i] = 1;
cnt++;
q.push({ i, d + 1 });
}
}
}
ans = max(ans, cnt);
}
int main() {
FASTIO;
cin >> n;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
cin >> arr[i][j];
for (int i = 0; i < n; i++) {
memset(visit, false, sizeof(visit));
bfs(i);
}
cout << ans << "\n";
return 0;
}
설명
모든 사람에 대해 bfs로 숫자 세서 최댓값을 갱신해주면 됩니다.
느낀 점
bfs 기본 문제.