题目
解法:拓扑排序
这道题目是很经典的拓扑排序,用BFS和DFS都可以实现,就跟Leetcode 785一样,BFS解法和DFS解法只差储存数据是用队列还是栈。具体解法如下:
- 建立一个邻接矩阵表示图,在建立邻接矩阵的时候注意指向,必须是前修课程指向后修课程
- 同时将所有入度为0的点加入队列或者栈
- 进行搜索,将入度为0的点的相邻节点入度全部减1,如果出现了新的节点,那么将新节点加入队列和栈
- 搜索结束后,如果图中所有节点都入度为0,则证明拓扑排序成功,否则则证明图中成环
python:
python解法中我使用栈来实现,邻接矩阵用python里面的defaultdict实现
class Solution:
def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:
graph = collections.defaultdict(list)
indegrees = [0]*numCourses
for prerequisite in prerequisites:
graph[prerequisite[1]].append(prerequisite[0])
indegrees[prerequisite[0]