forked from TheAlgorithms/JavaScript
- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathConnectedComponents.js
More file actions
Latest commit
64 lines (56 loc) · 1.83 KB
/
Copy pathConnectedComponents.js
File metadata and controls
64 lines (56 loc) · 1.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
classGraphUnweightedUndirectedAdjacencyList{
// Unweighted Undirected Graph class
constructor(){
this.connections={}
}
addNode(node){
// Function to add a node to the graph (connection represented by set)
this.connections[node]=newSet()
}
addEdge(node1,node2){
// Function to add an edge (adds the node too if they are not present in the graph)
if(!(node1inthis.connections)){
this.addNode(node1)
}
if(!(node2inthis.connections)){
this.addNode(node2)
}
this.connections[node1].add(node2)
this.connections[node2].add(node1)
}
DFSComponent(components,node,visited){
// Helper function to populate the visited set with the nodes in each component
// adding the first visited node in the component to the array
components.push(node)
conststack=[node]
// populating the visited set using DFS (Iterative)
while(stack.length>0){
constcurr=stack.pop()
visited.add(curr.toString())
for(constneighbourofthis.connections[curr].keys()){
if(!visited.has(neighbour.toString())){
stack.push(neighbour)
}
}
}
}
connectedComponents(){
// Function to generate the Connected Components
// Result is an array containing 1 node from each component
constvisited=newSet()
constcomponents=[]
for(constnodeofObject.keys(this.connections)){
if(!visited.has(node.toString())){
this.DFSComponent(components,node,visited)
}
}
returncomponents
}
}
export{GraphUnweightedUndirectedAdjacencyList}
// Example
// const graph = new GraphUnweightedUndirectedAdjacencyList()
// graph.addEdge(1, 2) // Component 1
// graph.addEdge(3, 4) // Component 2
// graph.addEdge(3, 5) // Component 2
// const components = graph.connectedComponents()