diff --git "a/data/3.\347\256\227\346\263\225\351\253\230\351\230\266/7.leetcode\345\233\276\344\270\216\346\220\234\347\264\242/206_\350\257\276\347\250\213\350\241\250/config.json" "b/data/3.\347\256\227\346\263\225\351\253\230\351\230\266/7.leetcode\345\233\276\344\270\216\346\220\234\347\264\242/206_\350\257\276\347\250\213\350\241\250/config.json"
new file mode 100644
index 0000000000000000000000000000000000000000..f53bdea562b851920b2440a1d4a1605f9cab0d32
--- /dev/null
+++ "b/data/3.\347\256\227\346\263\225\351\253\230\351\230\266/7.leetcode\345\233\276\344\270\216\346\220\234\347\264\242/206_\350\257\276\347\250\213\350\241\250/config.json"
@@ -0,0 +1,12 @@
+{
+ "node_id": "569d5e11c4fc5de7844053d9a733c5e8",
+ "keywords": [
+ "leetcode",
+ "课程表"
+ ],
+ "children": [],
+ "export": [
+ "solution.json"
+ ],
+ "title": "课程表"
+}
\ No newline at end of file
diff --git "a/data/3.\347\256\227\346\263\225\351\253\230\351\230\266/7.leetcode\345\233\276\344\270\216\346\220\234\347\264\242/206_\350\257\276\347\250\213\350\241\250/desc.html" "b/data/3.\347\256\227\346\263\225\351\253\230\351\230\266/7.leetcode\345\233\276\344\270\216\346\220\234\347\264\242/206_\350\257\276\347\250\213\350\241\250/desc.html"
new file mode 100644
index 0000000000000000000000000000000000000000..b38280a32fea5eecf59d01cd87490bdadb54faad
--- /dev/null
+++ "b/data/3.\347\256\227\346\263\225\351\253\230\351\230\266/7.leetcode\345\233\276\344\270\216\346\220\234\347\264\242/206_\350\257\276\347\250\213\350\241\250/desc.html"
@@ -0,0 +1,37 @@
+
你这个学期必须选修 numCourses
门课程,记为 0
到 numCourses - 1
。
+
+在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites
给出,其中 prerequisites[i] = [ai, bi]
,表示如果要学习课程 ai
则 必须 先学习课程 bi
。
+
+
+ - 例如,先修课程对
[0, 1]
表示:想要学习课程 0
,你需要先完成课程 1
。
+
+
+请你判断是否可能完成所有课程的学习?如果可以,返回 true
;否则,返回 false
。
+
+
+
+示例 1:
+
+
+输入:numCourses = 2, prerequisites = [[1,0]]
+输出:true
+解释:总共有 2 门课程。学习课程 1 之前,你需要完成课程 0 。这是可能的。
+
+示例 2:
+
+
+输入:numCourses = 2, prerequisites = [[1,0],[0,1]]
+输出:false
+解释:总共有 2 门课程。学习课程 1 之前,你需要先完成课程 0 ;并且学习课程 0 之前,你还应先完成课程 1 。这是不可能的。
+
+
+
+提示:
+
+
+ 1 <= numCourses <= 105
+ 0 <= prerequisites.length <= 5000
+ prerequisites[i].length == 2
+ 0 <= ai, bi < numCourses
+ prerequisites[i]
中的所有课程对 互不相同
+
diff --git "a/data/3.\347\256\227\346\263\225\351\253\230\351\230\266/7.leetcode\345\233\276\344\270\216\346\220\234\347\264\242/206_\350\257\276\347\250\213\350\241\250/solution.cpp" "b/data/3.\347\256\227\346\263\225\351\253\230\351\230\266/7.leetcode\345\233\276\344\270\216\346\220\234\347\264\242/206_\350\257\276\347\250\213\350\241\250/solution.cpp"
new file mode 100644
index 0000000000000000000000000000000000000000..f0a99949cfb256d22367054cc02a03ad03fea106
--- /dev/null
+++ "b/data/3.\347\256\227\346\263\225\351\253\230\351\230\266/7.leetcode\345\233\276\344\270\216\346\220\234\347\264\242/206_\350\257\276\347\250\213\350\241\250/solution.cpp"
@@ -0,0 +1,40 @@
+#include
+using namespace std;
+
+class Solution
+{
+public:
+ bool canFinish(int numCourses, vector> &prerequisites)
+ {
+
+ vector> graph(numCourses, vector());
+
+ for (auto num : prerequisites)
+ {
+ graph[num[1]].push_back(num[0]);
+ }
+ vector visit(numCourses);
+
+ for (int i = 0; i < numCourses; i++)
+ {
+ if (!dfs(graph, visit, i))
+ return false;
+ }
+ return true;
+ }
+ bool dfs(vector> &g, vector &visit, int i)
+ {
+ if (visit[i] == -1)
+ return false;
+ if (visit[i] == 1)
+ return true;
+ visit[i] = -1;
+ for (auto a : g[i])
+ {
+ if (!dfs(g, visit, a))
+ return false;
+ }
+ visit[i] = 1;
+ return true;
+ }
+};
\ No newline at end of file
diff --git "a/data/3.\347\256\227\346\263\225\351\253\230\351\230\266/7.leetcode\345\233\276\344\270\216\346\220\234\347\264\242/206_\350\257\276\347\250\213\350\241\250/solution.json" "b/data/3.\347\256\227\346\263\225\351\253\230\351\230\266/7.leetcode\345\233\276\344\270\216\346\220\234\347\264\242/206_\350\257\276\347\250\213\350\241\250/solution.json"
new file mode 100644
index 0000000000000000000000000000000000000000..378ec7c3bd5779f1d0419c845d911690894a4632
--- /dev/null
+++ "b/data/3.\347\256\227\346\263\225\351\253\230\351\230\266/7.leetcode\345\233\276\344\270\216\346\220\234\347\264\242/206_\350\257\276\347\250\213\350\241\250/solution.json"
@@ -0,0 +1,6 @@
+{
+ "type": "code_options",
+ "author": "CSDN.net",
+ "source": "solution.md",
+ "exercise_id": "faf3b0518667467b971e642c5ed5b077"
+}
\ No newline at end of file
diff --git "a/data/3.\347\256\227\346\263\225\351\253\230\351\230\266/7.leetcode\345\233\276\344\270\216\346\220\234\347\264\242/206_\350\257\276\347\250\213\350\241\250/solution.md" "b/data/3.\347\256\227\346\263\225\351\253\230\351\230\266/7.leetcode\345\233\276\344\270\216\346\220\234\347\264\242/206_\350\257\276\347\250\213\350\241\250/solution.md"
new file mode 100644
index 0000000000000000000000000000000000000000..9b6b6cc8cb5570ef337b35a37ca961acc7470a8a
--- /dev/null
+++ "b/data/3.\347\256\227\346\263\225\351\253\230\351\230\266/7.leetcode\345\233\276\344\270\216\346\220\234\347\264\242/206_\350\257\276\347\250\213\350\241\250/solution.md"
@@ -0,0 +1,231 @@
+# 课程表
+你这个学期必须选修 numCourses
门课程,记为 0
到 numCourses - 1
。
+
+在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites
给出,其中 prerequisites[i] = [ai, bi]
,表示如果要学习课程 ai
则 必须 先学习课程 bi
。
+
+
+ - 例如,先修课程对
[0, 1]
表示:想要学习课程 0
,你需要先完成课程 1
。
+
+
+请你判断是否可能完成所有课程的学习?如果可以,返回 true
;否则,返回 false
。
+
+
+
+示例 1:
+
+
+输入:numCourses = 2, prerequisites = [[1,0]]
+输出:true
+解释:总共有 2 门课程。学习课程 1 之前,你需要完成课程 0 。这是可能的。
+
+示例 2:
+
+
+输入:numCourses = 2, prerequisites = [[1,0],[0,1]]
+输出:false
+解释:总共有 2 门课程。学习课程 1 之前,你需要先完成课程 0 ;并且学习课程 0 之前,你还应先完成课程 1 。这是不可能的。
+
+
+
+提示:
+
+
+ 1 <= numCourses <= 105
+ 0 <= prerequisites.length <= 5000
+ prerequisites[i].length == 2
+ 0 <= ai, bi < numCourses
+ prerequisites[i]
中的所有课程对 互不相同
+
+
+以下错误的选项是?
+## aop
+### before
+```cpp
+#include
+using namespace std;
+```
+### after
+```cpp
+
+```
+
+## 答案
+```cpp
+class Solution
+{
+public:
+ bool canFinish(int numCourses, vector> &prerequisites)
+ {
+
+ unordered_map> rels;
+ int *inDs = new int[numCourses];
+ for (int i = 0; i < numCourses; i++)
+ {
+ inDs[i] = 0;
+ vector temp;
+ rels[i] = temp;
+ }
+
+ for (int i = 0; i < prerequisites.size(); i++)
+ {
+ rels[prerequisites[i][1]].push_back(prerequisites[i][0]);
+ inDs[prerequisites[i][0]]++;
+ }
+ queue zeroInD;
+ int num = 0;
+ while (num != numCourses)
+ {
+ for (int i = 0; i < numCourses; i++)
+ {
+ if (inDs[i] == 0)
+ {
+ zeroInD.push(i);
+ num++;
+ inDs[i] = -1;
+ }
+ }
+ if (zeroInD.empty() && num != numCourses)
+ return false;
+ while (!zeroInD.empty())
+ {
+ int topV = zeroInD.front();
+ zeroInD.pop();
+ vector topVEdges = rels[topV];
+ for (int j = 0; j < topVEdges.size(); j++)
+ {
+ inDs[topVEdges[j]]++;
+ }
+ }
+ }
+ if (num == numCourses)
+ return true;
+ else
+ return false;
+ }
+};
+```
+## 选项
+
+### A
+```cpp
+class Solution
+{
+public:
+ bool canFinish(int numCourses, vector> &prerequisites)
+ {
+ if (numCourses == 0)
+ return true;
+
+ vector course(numCourses, 0);
+ vector> rela(numCourses);
+ for (int i = 0; i < prerequisites.size(); i++)
+ {
+ course[prerequisites[i][0]]++;
+ rela[prerequisites[i][1]].push_back(prerequisites[i][0]);
+ }
+
+ queue cq;
+ for (int i = 0; i < numCourses; i++)
+ if (course[i] == 0)
+ cq.push(i);
+
+ int num = numCourses;
+ while (!cq.empty())
+ {
+ int c = cq.front();
+ cq.pop();
+ num--;
+ for (int i = 0; i < rela[c].size(); i++)
+ {
+ int this_course = rela[c][i];
+ course[this_course]--;
+ if (course[this_course] == 0)
+ cq.push(this_course);
+ }
+ }
+ return num == 0 ? true : false;
+ }
+};
+```
+
+### B
+```cpp
+class Solution
+{
+public:
+ bool canFinish(int numCourses, vector> &prerequisites)
+ {
+ vector res, degree(numCourses, 0);
+ unordered_map> map;
+
+ for (auto &e : prerequisites)
+ {
+ map[e[1]].push_back(e[0]);
+ degree[e[0]]++;
+ }
+
+ queue q;
+ for (int i = 0; i < numCourses; i++)
+ {
+ if (degree[i] == 0)
+ {
+ q.push(i);
+ }
+ }
+ while (!q.empty())
+ {
+ int cur = q.front();
+ res.push_back(cur);
+ q.pop();
+ for (auto &next : map[cur])
+ {
+ degree[next]--;
+ if (degree[next] == 0)
+ q.push(next);
+ }
+ }
+ return res.size() == numCourses;
+ }
+};
+```
+
+### C
+```cpp
+class Solution
+{
+public:
+ bool canFinish(int numCourses, vector> &prerequisites)
+ {
+
+ vector> graph(numCourses, vector());
+
+ for (auto num : prerequisites)
+ {
+ graph[num[1]].push_back(num[0]);
+ }
+ vector visit(numCourses);
+
+ for (int i = 0; i < numCourses; i++)
+ {
+ if (!dfs(graph, visit, i))
+ return false;
+ }
+ return true;
+ }
+ bool dfs(vector> &g, vector &visit, int i)
+ {
+ if (visit[i] == -1)
+ return false;
+ if (visit[i] == 1)
+ return true;
+ visit[i] = -1;
+ for (auto a : g[i])
+ {
+ if (!dfs(g, visit, a))
+ return false;
+ }
+ visit[i] = 1;
+ return true;
+ }
+};
+```