Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
CSDN 技术社区
skill_tree_algorithm
提交
cb7085bb
S
skill_tree_algorithm
项目概览
CSDN 技术社区
/
skill_tree_algorithm
通知
9
Star
8
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
skill_tree_algorithm
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
cb7085bb
编写于
11月 03, 2021
作者:
每日一练社区
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add one exercises
上级
17a1a4b4
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
329 addition
and
0 deletion
+329
-0
data/3.算法高阶/7.leetcode图与搜索/206_课程表/config.json
data/3.算法高阶/7.leetcode图与搜索/206_课程表/config.json
+13
-0
data/3.算法高阶/7.leetcode图与搜索/206_课程表/desc.html
data/3.算法高阶/7.leetcode图与搜索/206_课程表/desc.html
+37
-0
data/3.算法高阶/7.leetcode图与搜索/206_课程表/solution.cpp
data/3.算法高阶/7.leetcode图与搜索/206_课程表/solution.cpp
+41
-0
data/3.算法高阶/7.leetcode图与搜索/206_课程表/solution.json
data/3.算法高阶/7.leetcode图与搜索/206_课程表/solution.json
+7
-0
data/3.算法高阶/7.leetcode图与搜索/206_课程表/solution.md
data/3.算法高阶/7.leetcode图与搜索/206_课程表/solution.md
+231
-0
未找到文件。
data/3.算法高阶/7.leetcode图与搜索/206_课程表/config.json
0 → 100644
浏览文件 @
cb7085bb
{
"node_id"
:
"569d5e11c4fc5de7844053d9a733c5e8"
,
"keywords"
:
[
"leetcode"
,
"课程表"
],
"children"
:
[],
"export"
:
[
"solution.json"
],
"title"
:
"课程表"
}
\ No newline at end of file
data/3.算法高阶/7.leetcode图与搜索/206_课程表/desc.html
0 → 100644
浏览文件 @
cb7085bb
<p>
你这个学期必须选修
<code>
numCourses
</code>
门课程,记为
<code>
0
</code>
到
<code>
numCourses - 1
</code>
。
</p>
<p>
在选修某些课程之前需要一些先修课程。 先修课程按数组
<code>
prerequisites
</code>
给出,其中
<code>
prerequisites[i] = [a
<sub>
i
</sub>
, b
<sub>
i
</sub>
]
</code>
,表示如果要学习课程
<code>
a
<sub>
i
</sub></code>
则
<strong>
必须
</strong>
先学习课程
<code>
b
<sub>
i
</sub></code><sub>
</sub>
。
</p>
<ul>
<li>
例如,先修课程对
<code>
[0, 1]
</code>
表示:想要学习课程
<code>
0
</code>
,你需要先完成课程
<code>
1
</code>
。
</li>
</ul>
<p>
请你判断是否可能完成所有课程的学习?如果可以,返回
<code>
true
</code>
;否则,返回
<code>
false
</code>
。
</p>
<p>
</p>
<p><strong>
示例 1:
</strong></p>
<pre>
<strong>
输入:
</strong>
numCourses = 2, prerequisites = [[1,0]]
<strong>
输出:
</strong>
true
<strong>
解释:
</strong>
总共有 2 门课程。学习课程 1 之前,你需要完成课程 0 。这是可能的。
</pre>
<p><strong>
示例 2:
</strong></p>
<pre>
<strong>
输入:
</strong>
numCourses = 2, prerequisites = [[1,0],[0,1]]
<strong>
输出:
</strong>
false
<strong>
解释:
</strong>
总共有 2 门课程。学习课程 1 之前,你需要先完成课程 0 ;并且学习课程 0 之前,你还应先完成课程 1 。这是不可能的。
</pre>
<p>
</p>
<p><strong>
提示:
</strong></p>
<ul>
<li><code>
1
<
=
numCourses
<=
10<
sup
>
5
</sup></code></li>
<li><code>
0
<
=
prerequisites.length
<=
5000</
code
></li>
<li><code>
prerequisites[i].length == 2
</code></li>
<li><code>
0
<
=
a
<
sub
>
i
</sub>
, b
<sub>
i
</sub>
<
numCourses
</
code
></li>
<li><code>
prerequisites[i]
</code>
中的所有课程对
<strong>
互不相同
</strong></li>
</ul>
data/3.算法高阶/7.leetcode图与搜索/206_课程表/solution.cpp
0 → 100644
浏览文件 @
cb7085bb
#include <bits/stdc++.h>
using
namespace
std
;
class
Solution
{
public:
bool
canFinish
(
int
numCourses
,
vector
<
vector
<
int
>>
&
prerequisites
)
{
vector
<
vector
<
int
>>
graph
(
numCourses
,
vector
<
int
>
());
for
(
auto
num
:
prerequisites
)
{
graph
[
num
[
1
]].
push_back
(
num
[
0
]);
}
vector
<
int
>
visit
(
numCourses
);
for
(
int
i
=
0
;
i
<
numCourses
;
i
++
)
{
if
(
!
dfs
(
graph
,
visit
,
i
))
return
false
;
}
return
true
;
}
bool
dfs
(
vector
<
vector
<
int
>>
&
g
,
vector
<
int
>
&
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
data/3.算法高阶/7.leetcode图与搜索/206_课程表/solution.json
0 → 100644
浏览文件 @
cb7085bb
{
"type"
:
"code_options"
,
"author"
:
"CSDN.net"
,
"source"
:
"solution.md"
,
"exercise_id"
:
"faf3b0518667467b971e642c5ed5b077"
}
\ No newline at end of file
data/3.算法高阶/7.leetcode图与搜索/206_课程表/solution.md
0 → 100644
浏览文件 @
cb7085bb
# 课程表
<p>
你这个学期必须选修
<code>
numCourses
</code>
门课程,记为
<code>
0
</code>
到
<code>
numCourses - 1
</code>
。
</p>
<p>
在选修某些课程之前需要一些先修课程。 先修课程按数组
<code>
prerequisites
</code>
给出,其中
<code>
prerequisites[i] = [a
<sub>
i
</sub>
, b
<sub>
i
</sub>
]
</code>
,表示如果要学习课程
<code>
a
<sub>
i
</sub></code>
则
<strong>
必须
</strong>
先学习课程
<code>
b
<sub>
i
</sub></code><sub>
</sub>
。
</p>
<ul>
<li>
例如,先修课程对
<code>
[0, 1]
</code>
表示:想要学习课程
<code>
0
</code>
,你需要先完成课程
<code>
1
</code>
。
</li>
</ul>
<p>
请你判断是否可能完成所有课程的学习?如果可以,返回
<code>
true
</code>
;否则,返回
<code>
false
</code>
。
</p>
<p>
</p>
<p><strong>
示例 1:
</strong></p>
<pre>
<strong>
输入:
</strong>
numCourses = 2, prerequisites = [[1,0]]
<strong>
输出:
</strong>
true
<strong>
解释:
</strong>
总共有 2 门课程。学习课程 1 之前,你需要完成课程 0 。这是可能的。
</pre>
<p><strong>
示例 2:
</strong></p>
<pre>
<strong>
输入:
</strong>
numCourses = 2, prerequisites = [[1,0],[0,1]]
<strong>
输出:
</strong>
false
<strong>
解释:
</strong>
总共有 2 门课程。学习课程 1 之前,你需要先完成课程 0 ;并且学习课程 0 之前,你还应先完成课程 1 。这是不可能的。
</pre>
<p>
</p>
<p><strong>
提示:
</strong></p>
<ul>
<li><code>
1
<
=
numCourses
<=
10<
sup
>
5
</sup></code></li>
<li><code>
0
<
=
prerequisites.length
<=
5000</
code
></li>
<li><code>
prerequisites[i].length == 2
</code></li>
<li><code>
0
<
=
a
<
sub
>
i
</sub>
, b
<sub>
i
</sub>
<
numCourses
</
code
></li>
<li><code>
prerequisites[i]
</code>
中的所有课程对
<strong>
互不相同
</strong></li>
</ul>
<p>
以下错误的选项是?
</p>
## aop
### before
```
cpp
#include <bits/stdc++.h>
using
namespace
std
;
```
### after
```
cpp
```
## 答案
```
cpp
class
Solution
{
public:
bool
canFinish
(
int
numCourses
,
vector
<
vector
<
int
>>
&
prerequisites
)
{
unordered_map
<
int
,
vector
<
int
>>
rels
;
int
*
inDs
=
new
int
[
numCourses
];
for
(
int
i
=
0
;
i
<
numCourses
;
i
++
)
{
inDs
[
i
]
=
0
;
vector
<
int
>
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
<
int
>
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
<
int
>
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
<
vector
<
int
>>
&
prerequisites
)
{
if
(
numCourses
==
0
)
return
true
;
vector
<
int
>
course
(
numCourses
,
0
);
vector
<
vector
<
int
>>
rela
(
numCourses
);
for
(
int
i
=
0
;
i
<
prerequisites
.
size
();
i
++
)
{
course
[
prerequisites
[
i
][
0
]]
++
;
rela
[
prerequisites
[
i
][
1
]].
push_back
(
prerequisites
[
i
][
0
]);
}
queue
<
int
>
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
<
vector
<
int
>>
&
prerequisites
)
{
vector
<
int
>
res
,
degree
(
numCourses
,
0
);
unordered_map
<
int
,
vector
<
int
>>
map
;
for
(
auto
&
e
:
prerequisites
)
{
map
[
e
[
1
]].
push_back
(
e
[
0
]);
degree
[
e
[
0
]]
++
;
}
queue
<
int
>
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
<
vector
<
int
>>
&
prerequisites
)
{
vector
<
vector
<
int
>>
graph
(
numCourses
,
vector
<
int
>
());
for
(
auto
num
:
prerequisites
)
{
graph
[
num
[
1
]].
push_back
(
num
[
0
]);
}
vector
<
int
>
visit
(
numCourses
);
for
(
int
i
=
0
;
i
<
numCourses
;
i
++
)
{
if
(
!
dfs
(
graph
,
visit
,
i
))
return
false
;
}
return
true
;
}
bool
dfs
(
vector
<
vector
<
int
>>
&
g
,
vector
<
int
>
&
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
;
}
};
```
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录