PS (C, C++)
[백준/C++] 6118 숨바꼭질
최연재
2024. 11. 8. 23:09
https://www.acmicpc.net/problem/6118
코드
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
#define MAX 20001
int n, m, maxAns;
int dst[MAX];
vector<int> v[MAX];
bool visit[MAX];
void bfs() {
queue<int> q;
q.push(1);
visit[1] = true;
dst[1] = 0;
while (!q.empty()) {
int now = q.front();
q.pop();
for (int i = 0; i < v[now].size(); i++) {
int next = v[now][i];
if (!visit[next]) {
visit[next] = true;
dst[next] = dst[now] + 1;
q.push(next);
}
}
}
for (int i = 1; i <= n; i++)
maxAns = max(maxAns, dst[i]);
int cnt = 0;
bool print = false;
for (int i = 1; i <= n; i++) {
if (maxAns == dst[i]) {
cnt++;
if (!print) {
cout << i << " ";
print = true;
}
}
}
cout << maxAns << " " << cnt;
}
int main() {
cin >> n >> m;
for (int i = 0, a, b; i < m; i++) {
cin >> a >> b;
v[a].push_back(b);
v[b].push_back(a);
}
bfs();
return 0;
}
설명
bfs를 이용해서 1번 헛간에서 각 헛간까지의 거리를 구합니다. bfs 이후 먼저 가장 거리가 먼 헛간의 거리를 구한 후 반복문을 돌면서 헛간 번호, 최대 거리를 가진 헛간의 개수를 구하면 됩니다.
느낀 점
bfs에 조건을 추가한 문제입니다.