体育课共有
个考核项目,编号为
到
,考核中每两个项目被划分为一组得到分组数组
,现规定若想完成项目
,必须先完成
。保证所有分组互不相同,若分组情况能顺利完成考核,请返回true否则返回false。
数据范围:
3,[[2,1]]
true
要先完成1号项目,再完成2号项目,而0号项目不受约束,故可以完成项目返回Yes
3,[[1,0], [0,1]]
false
第一个分组要求先完成0号项目,再完成1号项目;而第二个分组要求先完成1号项目,再完成0号项目,自相矛盾,故不可以完成项目返回No
class Solution:
def canFinish(self , numProject: int, groups: List[List[int]]) -> bool:
# write code here
projects = {x:0 for x in range(numProject)}
while len(projects) > 0:
for a, b in groups:
if a in projects and b in projects:
projects[a] = 1
valid = False
for i in list(projects.keys()):
if projects[i] == 0:
valid = True
del projects[i]
if not valid:
break
projects = {x:0 for x in projects}
return len(projects) == 0