UNPKG

lgrthms

Version:

Algorithms and data structures for your JavaScript and TypeScript projects 🧑‍💻

56 lines (55 loc) 1.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.dfs = exports.depthFirstSearch = exports.bfs = exports.breadthFirstSearch = void 0; const Queue_1 = require("../../dataStructures/Queue"); const Stack_1 = require("../../dataStructures/Stack"); // O(n + e) time | O(n) space function breadthFirstSearch(nodeId, graph, predicate) { return bfs(nodeId, graph, predicate); } exports.breadthFirstSearch = breadthFirstSearch; // O(n + e) time | O(n) space function bfs(nodeId, graph, predicate) { const visited = new Set(); const queue = new Queue_1.Queue(); queue.enqueue(nodeId); while (queue.size > 0) { const currentId = queue.dequeue(); visited.add(currentId); const current = graph.getNode(currentId); if (predicate(current.value)) { return current.id; } for (const neighborId in current.edges) { if (!visited.has(neighborId)) { queue.enqueue(neighborId); } } } } exports.bfs = bfs; // O(n + e) time | O(n) space function depthFirstSearch(nodeId, graph, predicate) { return dfs(nodeId, graph, predicate); } exports.depthFirstSearch = depthFirstSearch; // O(n + e) time | O(n) space function dfs(nodeId, graph, predicate) { const visited = new Set(); const stack = new Stack_1.Stack(); stack.push(nodeId); while (stack.size > 0) { const currentId = stack.pop(); visited.add(currentId); const current = graph.getNode(currentId); if (predicate(current.value)) { return current.id; } for (const neighborId in current.edges) { if (!visited.has(neighborId)) { stack.push(neighborId); } } } } exports.dfs = dfs;