十二、图及算法-下
本系列博客基于“ (北京大学)数据结构与算法python版”慕课,课程在中国大学慕课和bilibili上均可找到。
1. 内容
- 深度优先搜索DFS算法
- 图的应用:拓扑排序,强连通分支,最短路径,最小生成树,
2. 课程代码
在GitHub中下载
3. OJ作业
所有代码均可在github中下载
3.1 先修课
题目内容:
有 n 门课程要选,其编号分别由 0 至 n-1。每个课程都有一些需要提前学完的先修课程:例如,假设在学习课程 0 前需要先学习课程 1 ,我们用一个先修关系对[0, 1]来表示这种 “后学习课程,先修课程” 的关系。现给定一系列课程与若干先修关系,请判断是否存在一个方案可以学完所有课程
输入格式:输入分为两行,第一行为一个整数,表示课程的总数。第二行为一个嵌套列表的Python表达式,包含若干先修关系对
输出格式:True或False,表示是否存在一个按照先修关系学完所有课程的顺序
输入样例:
2
[[1,0],[0,1]]
输出样例:
False
方法:先用一个列表存储每个课程的先修课程。然后递归判断每一个课是否会产生环
def canFinish(n, course_list, pre):
if len(course_list) == 0: # 没有先后修关系,
return True
for i in range(len(pre)): # 得到每门课的所有先修课程
course_list[pre[i][1]].append(pre