There are a total of n courses you have to take, labeled from 0 to n-1.
Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as a pair: [0,1]
Given the total number of courses and a list of prerequisite pairs, is it possible for you to finish all courses?
Example 1:
Input: 2, [[1,0]] Output: true Explanation: There are a total of 2 courses to take. To take course 1 you should have finished course 0. So it is possible.
Example 2:
Input: 2, [[1,0],[0,1]] Output: false Explanation: There are a total of 2 courses to take. To take course 1 you should have finished course 0, and to take course 0 you should also have finished course 1. So it is impossible.
Note:
- The input prerequisites is a graph represented by a list of edges, not adjacency matrices. Read more about how a graph is represented.
- You may assume that there are no duplicate edges in the input prerequisites.
Answer:
from collections import defaultdict
class Solution( ):
def dfs(self,node,graph):
self.visited[node]=True
self.track[node]=True
for nextnode in graph[node]:
if not self.visited[nextnode]:
if self.dfs(nextnode,graph):
return True
elif self.track[nextnode]:
return True
self.track[node]=False
return False
def canFinish(self, numCourses, prerequisites):
\"\"\"
:type numCourses: int
:type prerequisites: List[List[int]]
:rtype: bool
\"\"\"
self.visited=[False]*numCourses
self.track=[False]*numCourses
graph=defaultdict(list)
for p in prerequisites:
graph[p[0]].append(p[1])
for start in graph.keys():
if self.visited[start]==False:
if self.dfs(start,graph):
return False
return True
dfs
如果有cycle存在,则一定有back edge存在,就是有edge从子node连到父级node
继续阅读与本文标签相同的文章
上一篇 :
CDN新品发布:阿里云SCDN安全加速开放公测
下一篇 :
onBackPressed
-
在线PDF加密,你的隐私你做主!
2026-05-18栏目: 教程
-
浅谈物联网用户体验目标的变化
2026-05-18栏目: 教程
-
Linux基础命令---host域名查询工具
2026-05-18栏目: 教程
-
Apache Flink Meetup 北京站,可能有你最想听的技术干货!
2026-05-18栏目: 教程
-
你真的了解RPA吗?
2026-05-18栏目: 教程
