ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

207.210 课程表 / 检测图是否是 有向无环图(DAG)使用方法为广度遍历,拓扑排序,入度法

2020-05-07 15:56:49  阅读:279  来源: 互联网

标签:index DAG numCourses queue 环图 课程 课程表 indegrees append


 本题为leetcode 207 210题 

 

 

思路:

  1.本题求课程学习路径,即  9021 -> 9024 -> 9417 这种顺序

  2.观察可知 课程学习路劲为有向图, 如果无环则可输出,有环则返回False

方法:

  1. 遍历所有二元对,确定0 - n-1门课程的入度

  2. 顺便将所有课程的进阶课程加入List

  3.  将所有入度为0的课程加入 队列(保证先进先出),并把其进阶课程的入度-1,如果减后入度==0,则也加入queue

  4. 最后 如果 出queue的个数 = 总数,则说明无环。

代码:

 

from collections import deque class Solution:     def findOrder(self, numCourses: int, prerequisites: List[List[int]]) -> List[int]:         #         indegrees = [0 for _ in range(numCourses)]         adjacency = [[] for _ in range(numCourses)]         queue = deque()         res = []         # 比如 学3 0为前置课, 则 Indegrees[3]++ pre[0].append(3)         for curStudy,prerequisite in prerequisites:             indegrees[curStudy] += 1             adjacency[prerequisite].append(curStudy)         for index,value in enumerate(indegrees):             if value == 0:                 queue.append(index)         while queue:             # 多门课的前置课 或 单独的课             curIndex = queue.popleft()             res.append(curIndex)             numCourses-=1             for index in adjacency[curIndex]:                 indegrees[index] -=1                 if indegrees[index] == 0:                     queue.append(index)         if not numCourses:             return res         else:             return []

 

标签:index,DAG,numCourses,queue,环图,课程,课程表,indegrees,append
来源: https://www.cnblogs.com/ChevisZhang/p/12843502.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有