lgrthms
Version:
Algorithms and data structures for your JavaScript and TypeScript projects 🧑💻
56 lines (55 loc) • 1.8 kB
JavaScript
;
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;