Skip to content

Commit 51592b0

Browse files
committed
connected component with bfs
1 parent 76754bc commit 51592b0

File tree

1 file changed

+115
-0
lines changed

1 file changed

+115
-0
lines changed

Data Structures/Graph/graph.js

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,121 @@ function findComponents() {
191191

192192
console.log("Find components: ", findComponents());
193193

194+
function DFSPractice(s) {
195+
let visited = new Array(newGraph.vertices).fill(false);
196+
let components = [];
197+
let count = 0;
198+
199+
for (let i = 0; i < visited.length; i++) {
200+
if (!visited[i]) {
201+
count++;
202+
visit(i);
203+
}
204+
}
205+
206+
function visit(at) {
207+
visited[at] = true;
208+
components[at] = count;
209+
210+
let neighbors = newGraph.edges[at];
211+
let curr = neighbors.head;
212+
while (curr) {
213+
if (!visited[curr.data]) {
214+
visit(curr.data);
215+
}
216+
curr = curr.next;
217+
}
218+
}
219+
220+
return components;
221+
}
222+
223+
console.log("DFS Practice: ", DFSPractice(0));
224+
225+
function BFSPractice(s, e) {
226+
let prev = solvePractice(s);
227+
return reconstructPathPractice(s, e, prev);
228+
}
229+
230+
function solvePractice(s) {
231+
let visited = new Array(newGraph.vertices).fill(false);
232+
let prev = new Array(newGraph.vertices).fill(null);
233+
234+
let queue = [];
235+
queue.push(s);
236+
visited[s] = true;
237+
238+
while (queue.length) {
239+
let node = queue.shift();
240+
let neighbors = newGraph.edges[node];
241+
242+
let curr = neighbors.head;
243+
while (curr) {
244+
if (!visited[curr.data]) {
245+
if (!queue.includes(curr.data)) {
246+
queue.push(curr.data);
247+
}
248+
visited[curr.data] = true;
249+
prev[curr.data] = node;
250+
}
251+
curr = curr.next;
252+
}
253+
}
254+
console.log("BFS practice prev: ", prev);
255+
return prev;
256+
}
257+
258+
function reconstructPathPractice(s, e, prev) {
259+
let path = [];
260+
for (i = e; i !== null; i = prev[i]) {
261+
path.push(i);
262+
}
263+
path.reverse();
264+
return path[0] === s ? path : [];
265+
}
266+
267+
console.log("Shortest path from 3 -> 12: ", BFSPractice(3, 12));
268+
269+
function findConnectedComponentBFS() {
270+
let components = [];
271+
let visited = new Array(newGraph.vertices).fill(false);
272+
let count = 0;
273+
274+
for (let i = 0; i < visited.length; i++) {
275+
if (!visited[i]) {
276+
count++;
277+
bfs(i);
278+
}
279+
}
280+
281+
function bfs(at) {
282+
let q = [];
283+
q.push(at);
284+
visited[at] = true;
285+
components[at] = count;
286+
287+
while (q.length) {
288+
let node = q.shift();
289+
let neighbors = newGraph.edges[node];
290+
let curr = neighbors.head;
291+
292+
while (curr) {
293+
if (!visited[curr.data]) {
294+
if (!q.includes(curr.data)) {
295+
q.push(curr.data);
296+
}
297+
visited[curr.data] = true;
298+
components[curr.data] = count;
299+
}
300+
curr = curr.next;
301+
}
302+
}
303+
}
304+
305+
return components;
306+
}
307+
308+
console.log("Connected Components BFS: ", findConnectedComponentBFS());
194309
// function solvePractice(s) {
195310
// let queue = []; // Initialize the queue
196311
// queue.push(s); // enqueue node S for first visiting

0 commit comments

Comments
 (0)