n개의 노드가 있고 0에서 n - 1까지 레이블이 지정되어 있고 무향 모서리 목록도 제공된다고 가정하면 무향 그래프에서 연결된 구성 요소의 수를 찾기 위해 하나의 함수를 정의해야 합니다.
따라서 입력이 n =5이고 edge =[[0, 1], [1, 2], [3, 4]],
인 경우

그러면 출력은 2
가 됩니다.이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
dfs() 함수를 정의하면 노드, 그래프, 방문이라는 배열이 필요합니다.
-
방문[노드]가 거짓이면 -
-
방문[노드] :=참
-
-
초기화 i :=0의 경우, i <그래프[노드]의 크기일 때 업데이트(i를 1만큼 증가), 수행 -
-
dfs(그래프[노드, i], 그래프, 방문)
-
-
주요 방법에서 다음을 수행하십시오 -
-
크기가 n인 방문 배열 정의
-
n이 0이 아닌 경우 -
-
배열 그래프 정의[n]
-
-
initialize i :=0의 경우, i <모서리의 크기일 때 업데이트(i를 1만큼 증가), 수행 -
-
u :=가장자리[i, 0]
-
v :=가장자리[i, 1]
-
그래프 끝에 v 삽입[u]
-
그래프 끝에 u 삽입[v]
-
-
ret :=0
-
initialize i :=0의 경우, i
-
방문하지 않은 경우[i]가 0이 아닌 경우 -
-
dfs(i, 그래프, 방문)
-
(ret 1 증가)
-
-
-
리턴 렛
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
void dfs(int node, vector<int< graph[], vector<bool>& visited){
if(visited[node]) return;
visited[node] = true;
for(int i = 0; i < graph[node].size(); i++){
dfs(graph[node][i], graph, visited);
}
}
int countComponents(int n, vector<vector<int<>& edges) {
vector <bool> visited(n);
if(!n) return 0;
vector <int< graph[n];
for(int i = 0; i < edges.size(); i++){
int u = edges[i][0];
int v = edges[i][1];
graph[u].push_back(v);
graph[v].push_back(u);
}
int ret = 0;
for(int i = 0; i < n; i++){
if(!visited[i]){
dfs(i, graph, visited);
ret++;
}
}
return ret;
}
};
main(){
Solution ob;
vector<vector<int<> v = {{0,1},{1,2},{3,4}};
cout << (ob.countComponents(5, v));
} 입력
5, [[0,1],[1,2],[3,4]]
출력
2