mirror of
https://github.com/20kaushik02/spotify-manager.git
synced 2026-01-25 06:04:05 +00:00
mm.
This commit is contained in:
@@ -39,6 +39,35 @@ class myGraph {
|
|||||||
return this.edges.filter(edge => edge.to == node).map(edge => edge.from);
|
return this.edges.filter(edge => edge.to == node).map(edge => edge.from);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} node
|
||||||
|
* @returns {{ from: string, to: string }[]}
|
||||||
|
*/
|
||||||
|
getDirectHeadEdges(node) {
|
||||||
|
return this.edges.filter(edge => edge.to == node);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BFS
|
||||||
|
* @param {string} node
|
||||||
|
* @returns {string[]}
|
||||||
|
*/
|
||||||
|
getAllHeads(node) {
|
||||||
|
const headSet = new Set();
|
||||||
|
const toVisit = new Set(); // queue
|
||||||
|
toVisit.add(node);
|
||||||
|
while (toVisit.size > 0) {
|
||||||
|
const nextNode = toVisit.values().next().value;
|
||||||
|
const nextHeads = this.getDirectHeads(nextNode);
|
||||||
|
nextHeads.forEach(head => {
|
||||||
|
headSet.add(head);
|
||||||
|
toVisit.add(head);
|
||||||
|
});
|
||||||
|
toVisit.delete(nextNode);
|
||||||
|
}
|
||||||
|
return [...headSet];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} node
|
* @param {string} node
|
||||||
* @returns {string[]}
|
* @returns {string[]}
|
||||||
@@ -47,6 +76,35 @@ class myGraph {
|
|||||||
return this.edges.filter(edge => edge.from == node).map(edge => edge.to);
|
return this.edges.filter(edge => edge.from == node).map(edge => edge.to);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} node
|
||||||
|
* @returns {{ from: string, to: string }[]}
|
||||||
|
*/
|
||||||
|
getDirectTailEdges(node) {
|
||||||
|
return this.edges.filter(edge => edge.from == node);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BFS
|
||||||
|
* @param {string} node
|
||||||
|
* @returns {string[]}
|
||||||
|
*/
|
||||||
|
getAllTails(node) {
|
||||||
|
const tailSet = new Set();
|
||||||
|
const toVisit = new Set(); // queue
|
||||||
|
toVisit.add(node);
|
||||||
|
while (toVisit.size > 0) {
|
||||||
|
const nextNode = toVisit.values().next().value;
|
||||||
|
const nextTails = this.getDirectTails(nextNode);
|
||||||
|
nextTails.forEach(tail => {
|
||||||
|
tailSet.add(tail);
|
||||||
|
toVisit.add(tail);
|
||||||
|
});
|
||||||
|
toVisit.delete(nextNode);
|
||||||
|
}
|
||||||
|
return [...tailSet];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Kahn's topological sort
|
* Kahn's topological sort
|
||||||
* @returns {string[]}
|
* @returns {string[]}
|
||||||
|
|||||||
Reference in New Issue
Block a user