43 lines
1.2 KiB
JavaScript
43 lines
1.2 KiB
JavaScript
/**
|
|
* @param {number} numCourses
|
|
* @param {number[][]} prerequisites
|
|
* @return {boolean}
|
|
*/
|
|
const canFinish = function (numCourses, prerequisites) {
|
|
|
|
};
|
|
|
|
/*
|
|
这个题目是一个典型的拓扑排序问题,只需要判断拓扑排序最终能否输出所有元素,如果可以则表明是一个有向无环图,符合
|
|
题目要求,否则不符合
|
|
*/
|
|
function f1(numCourses, prerequisites) {
|
|
const graph = Array.from({ length: numCourses }, () => []);
|
|
const inDegree = Array(numCourses).fill(0);
|
|
|
|
// 构建图和入度表
|
|
for (const [a, b] of prerequisites) {
|
|
graph[b].push(a);
|
|
inDegree[a]++;
|
|
}
|
|
|
|
// 找出入度为零的顶点,将其加入队列
|
|
const queue = [];
|
|
for (let i = 0; i < numCourses; i++) {
|
|
if (inDegree[i] === 0) queue.push(i);
|
|
}
|
|
|
|
// 从队列中输出所有入度为零的顶点,如果输出的顶点数量和课程数量一致,表明可以拓扑排序,否则有环
|
|
let count = 0;
|
|
while (queue.length > 0) {
|
|
const node = queue.shift();
|
|
count++;
|
|
for (const neighbor of graph[node]) {
|
|
inDegree[neighbor]--;
|
|
if (inDegree[neighbor] === 0) queue.push(neighbor);
|
|
}
|
|
}
|
|
|
|
return count === numCourses;
|
|
}
|