#include <iostream>
using namespace std;
int v, e;
const int MAX = 101;
int V[MAX][MAX] = { 0, };
bool checked[MAX] = { 0, };
int count = 0;
void DFS(int x) {
checked[x] = true;
count++;
for (int i = 1; i <= v; i++) {
if (checked[i] == 0 && V[x][i] == 1) {
DFS(i);
}
}
}
int main() {
cin >> v >> e;
for (int i = 0; i < e; i++) {
int n, m;
cin >> n >> m;
V[n][m] = 1;
V[m][n] = 1;
}
DFS(1);
cout << count - 1;
}
DFS를 이용하여 문제를 품
checked[x] = true로 현재 방문한 노드(x)를 표시하고
for문을 통해 1부터 n대의 컴퓨터에 대해 i번째 컴퓨터를 방문 했는지(checked[i] ==0)와 현재 노드(x)와 i번째의 컴퓨터가 연결되어 있는지 V[i][x] == 1)를 확인하고 i의 dfs를 호출
'스터디 > 알고리즘' 카테고리의 다른 글
[백준 5212] 지구 온난화 (0) | 2022.01.13 |
---|---|
[백준 2164] 카드2 (0) | 2022.01.10 |
[백준 22864] 피로도 (0) | 2022.01.10 |
[백준 20436] ZOAC 3 (0) | 2022.01.10 |
[백준 1158] 요세푸스 문제 (0) | 2022.01.06 |