문제는 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

+ Recent posts