[백준] 2606 C++

윤경·2021년 2월 18일
0

Baekjoon

목록 보기
19/64

#include <iostream>
#include <vector>
using namespace std;

// 바이러스
// DFS: 깊이 우선 탐색(끝까지 탐색 후 다시 가장 가까운 갈림길 ...)
// BFS: 너비 우선 탐색(시작 정점에서 가장 가까운 정점부터 탐색)

int n, m, cnt=0;
vector<vector<int>> v;      // 양방향, 무방향 2차원 벡터
bool arr[101] = {false, };  // 방문 여부

void dfs(int c) {
  arr[c] = true;                          // 호출된 정점 true

  // 처음에 여기서 2차원을 생각하지 못해서 애씀
  for(int i=0; i<v[c].size(); i++) {      // 호출된 정점으로부터 끝까지
    if(arr[v[c][i]] == false) {           // 방문하지 않았다면
      dfs(v[c][i]);                       // 다시 그 정점으로부터 dfs 함수 호출
      cnt++;                              // 감염된 컴퓨터의 개수++
    }
  }
  return;
}
int main() {
  int a, b;

  // n: 컴퓨터 수, m: 컴퓨터 쌍의 수
  cin >> n >> m;
  // 벡터 사이즈를 컴퓨터 개수+1로 설정(v[0]은 버릴 것이므로)
  v.resize(n+1);

  for(int i=0; i<m; i++) {
    cin >> a >> b;
    v[a].push_back(b);
    v[b].push_back(a);
  }
  dfs(1);
  cout << cnt;

  return 0;
}

dfs, bfs는 아직도 어렵다ㅠㅁㅠ

profile
개발 바보 이사 중

0개의 댓글