Skip to content

Instantly share code, notes, and snippets.

@RP-3
Last active July 18, 2020 23:18
Show Gist options
  • Save RP-3/0f625bfa73765b6818d63ce52bdcb85f to your computer and use it in GitHub Desktop.
Save RP-3/0f625bfa73765b6818d63ce52bdcb85f to your computer and use it in GitHub Desktop.
/**
* @param {number} numCourses
* @param {number[][]} prerequisites
* @return {number[]}
*/
var findOrder = function(numCourses, prerequisites) {
const graph = new Array(numCourses).fill(null).map(() => []);
prerequisites.forEach(([course, req]) => graph[course].push(req));
const result = [];
const backtrace = new Set();
const seen = new Set();
const dfs = (node) => { // returns true if cycle detected
if(backtrace.has(node)) return true;
if(seen.has(node)) return false;
seen.add(node);
backtrace.add(node);
for(let i=0; i<graph[node].length; i++) if(dfs(graph[node][i])) return true;
backtrace.delete(node);
result.push(node);
return false;
};
for(let i=0; i<numCourses; i++){
if(dfs(i)) return [];
}
return result;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment