Skip to content

Instantly share code, notes, and snippets.

@0x-r4bbit
Created June 24, 2019 08:38
Show Gist options
  • Save 0x-r4bbit/79b83bd7bd7749379971b5a81b371187 to your computer and use it in GitHub Desktop.
Save 0x-r4bbit/79b83bd7bd7749379971b5a81b371187 to your computer and use it in GitHub Desktop.
class Node {
constructor(name) {
this.name = name;
this.edges = [];
}
addEdge(node) {
this.edges.push(node);
}
}
const a = new Node('a');
const b = new Node('b');
const c = new Node('c');
const d = new Node('d');
const e = new Node('e');
a.addEdge(b);
a.addEdge(d);
b.addEdge(c);
b.addEdge(e);
c.addEdge(d);
c.addEdge(e);
// Circular dependency
c.addEdge(b);
function depResolve(node, resolved, visited) {
visited.push(node);
for (edge of node.edges) {
if (!resolved.includes(edge)) {
if (visited.includes(edge)) {
throw new Error(`Circular dependency in ${node.name} -> ${edge.name}`);
}
depResolve(edge, resolved, visited);
}
}
resolved.push(node);
}
let resolved = [];
let visited = [];
depResolve(a, resolved, visited);
for (node of resolved) {
console.log(node.name);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment