728x90
상근이를 기준으로 1, 2번의 수를 구하는 문제입니다. (1과 2는 중복되지 않습니다.)
1. 상근이의 친구
2. 상근이의 친구에 친구
2차원 벡터에 연결관계를 넣어준 뒤
BFS를 방식으로 2번째 탐색까지 해주었습니다. (2번째 탐색 = 친구에 친구)
여기서 탐색된 사람들의 수를 세서 출력해주었습니다.
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
int main(int argc, char *argv[])
{
int n, m;
int x, y;
int count = 0;
int visit[501] = { 0, };
vector<vector<pair<int, int> > > v;
queue<pair<int, int> > q;
cin >> n >> m;
v.resize(n + 1);
for (int i = 0; i < m; ++i) {
cin >> x >> y;
v[x].push_back(make_pair(y, 0));
v[y].push_back(make_pair(x, 0));
}
q.push(make_pair(1, 0));
visit[1] = 1;
while (!q.empty()) {
int s = q.front().first;
int n = q.front().second;
q.pop();
if (n == 2) {
continue;
}
for (int i = 0; i < v[s].size(); ++i) {
int e = v[s][i].first;
if (visit[e] == 0) {
visit[e] = 1;
++count;
q.push(make_pair(e, n + 1));
}
}
}
cout << count << endl;
return 0;
}
'알고리즘' 카테고리의 다른 글
[C++] 백준 5397번 키로거 (0) | 2019.09.26 |
---|---|
[C++] 백준 1773번 폭죽쇼 (0) | 2019.09.26 |
[C++] 백준 1068번 트리 (0) | 2019.09.26 |
[C++] 백준 4963번 섬의 개수 (0) | 2019.09.26 |
[C++] 백준 1120번 문자열 (0) | 2019.09.26 |