문제는 1번 컴퓨터에서 무조건 시작하도록 되어 있다.
1번 컴퓨터와 인접한 컴퓨터들을 알아야 하니까 인접리스트를 이용해서 확인한다.
1번 컴퓨터에서 가장 깊이 들어간 노드 개수를 세면 되니까 dfs(1)로 시작해서 개수를 센다.
#include <bits/stdc++.h>
using namespace std;
int n, m, i, j;
vector<int> v[102]; // 인접리스트
bool visited[102]; // 방문체크
int cnt; // 1과 인접 개수
void dfs(int x){
visited[x] = true; //방문
for(int i = 0; i < v[x].size(); i++){
int nextnode = v[x][i];
if(!visited[nextnode]){
dfs(nextnode);
cnt++;
}
}
}
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
while(m--){
cin >> i >> j;
v[i].push_back(j);
v[j].push_back(i);
}
dfs(1); // 1번은 이미 걸렸고, 1번 때문에 바이러스 걸리는 컴퓨터의 개수
cout << cnt;
return 0;
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
최대 힙 백준 11279번 c++ (0) | 2022.02.19 |
---|---|
집합 백준 11723번 c++ (0) | 2022.02.19 |
비밀번호 찾기 백준 17219번 c++ (0) | 2022.02.17 |
저작권 백준 2914번 c++ (0) | 2022.02.17 |
민균이의 비밀번호 백준 9933번 c++ (0) | 2022.02.17 |