File tree Expand file tree Collapse file tree 1 file changed +70
-0
lines changed
number-of-connected-components-in-an-undirected-graph Expand file tree Collapse file tree 1 file changed +70
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * TC: O(N + E), N: 노드의 개수, E: 간선의 개수
3
+ * SC: O(N + E)
4
+ */
5
+
6
+ // DFS
7
+ function countComponentsDFS ( n : number , edges : number [ ] [ ] ) : number {
8
+ const graph : number [ ] [ ] = Array . from ( { length : n } , ( ) => [ ] ) ;
9
+
10
+ // 그래프 초기화
11
+ for ( const [ u , v ] of edges ) {
12
+ graph [ u ] . push ( v ) ;
13
+ graph [ v ] . push ( u ) ;
14
+ }
15
+
16
+ const visited = new Set < number > ( ) ;
17
+
18
+ function dfs ( node : number ) {
19
+ visited . add ( node ) ;
20
+ for ( const neighbor of graph [ node ] ) {
21
+ if ( ! visited . has ( neighbor ) ) {
22
+ dfs ( neighbor ) ;
23
+ }
24
+ }
25
+ }
26
+
27
+ let components = 0 ;
28
+ for ( let i = 0 ; i < n ; i ++ ) {
29
+ if ( ! visited . has ( i ) ) {
30
+ components ++ ;
31
+ dfs ( i ) ;
32
+ }
33
+ }
34
+
35
+ return components ;
36
+ }
37
+
38
+ // BFS
39
+ function countComponentsBFS ( n : number , edges : number [ ] [ ] ) : number {
40
+ const graph : number [ ] [ ] = Array . from ( { length : n } , ( ) => [ ] ) ;
41
+
42
+ // 그래프 초기화
43
+ for ( const [ u , v ] of edges ) {
44
+ graph [ u ] . push ( v ) ;
45
+ graph [ v ] . push ( u ) ;
46
+ }
47
+
48
+ const visited = new Set < number > ( ) ;
49
+ let components = 0 ;
50
+
51
+ for ( let i = 0 ; i < n ; i ++ ) {
52
+ if ( ! visited . has ( i ) ) {
53
+ components ++ ;
54
+ const queue : number [ ] = [ i ] ;
55
+
56
+ while ( queue . length > 0 ) {
57
+ const node = queue . shift ( ) ;
58
+ if ( node === undefined ) continue ;
59
+ if ( visited . has ( node ) ) continue ;
60
+ visited . add ( node ) ;
61
+
62
+ for ( const neighbor of graph [ node ] ) {
63
+ if ( ! visited . has ( neighbor ) ) queue . push ( neighbor ) ;
64
+ }
65
+ }
66
+ }
67
+ }
68
+
69
+ return components ;
70
+ }
You can’t perform that action at this time.
0 commit comments