这一题和207题一样,只不过207题需要返回是否可以完成(true/false),这一题需要返回其中的一种学习路线。
这里的处理方式和207题一样,都是构建邻接表还有入度表,然后从入度为0的课程入手,然后进行处理
var findOrder = function (numCourses, prerequisites) {
let map = new Map();
let indegree = new Array(numCourses).fill(0);
for (let [after, pre] of prerequisites) {
indegree[after]++;
if (!map.has(pre)) map.set(pre, []);
map.get(pre).push(after);
}
// indegree = 0
let queue = []
for(let i = 0; i < numCourses; ++i){
if(indegree[i] === 0) queue.push(i)
}
let res = []
while(queue.length){
let node = queue.shift()
res.push(node)
if(map.get(node)){
for(let c of map.get(node)){
indegree[c]--
if(indegree[c] === 0) queue.push(c)
}
}
}
return res.length === numCourses ? res : []
};