拓扑排序是有向无环图的应用,由偏序定义得到拓扑有序的操作叫做拓扑排序,拓扑有序是全序。
进行拓扑排序的方法:
1.在有向图中选一个入度为0 (即没有前驱)的节点输出
2.从图中删除该节点和以它为起点的依赖关系
3.直到全部节点输出或者当前不存在无前驱的节点为止(这种情况说明存在环)。
代码出自 http://www.zhufangxing.com/2015/05/01/leetcode-ICourse%20Schedule/ 学习一下
def canFinish(numCourses, prerequisites): if numCourses < 2 or len(prerequisites) < 2: print('True') return True while True: count = 0 mark = [True] * numCourses ###true表示入度为0 删除与之的依赖关系 for pre in prerequisites: mark[pre[0]] = False for pre in prerequisites: if mark[pre[1]]: count += 1 prerequisites.remove(pre) if prerequisites == []: print('True') return True elif count == 0: print('false') return False numCourses, prerequisites = 4, [[1,0],[2,0],[3,1],[3,2]] #numCourses, prerequisites = 2, [[1,0],[0,1]] canFinish(numCourses,prerequisites)
转载请标明出处:拓扑排序的应用---leetcode207 课程表