describir
Hay un total de n cursos que debes tomar, etiquetados del 0
al n - 1
.
Algunos cursos pueden tener requisitos previos, por ejemplo para tomar el curso 0 primero debes tomar el curso 1, que se expresa como un par: [0,1]
Dado el número total de cursos y una lista de pares de requisitos previos, ¿es posible terminar todos los cursos?
Muestra
Ejemplo 1:
Input: n = 2, prerequisites = [[1,0]]
Output: true
Ejemplo 2:
Input: n = 2, prerequisites = [[1,0],[0,1]]
Output: false
Temas relacionados
815. Plan de estudios IV 696. Plan de estudios III 616. Programación de cursos 127. Clasificación topológica
La primera pregunta de clasificación topológica que encontré. Escribí las respuestas después de consultar las explicaciones de los nueve capítulos. Todavía hay algunos puntos poco claros sobre este punto de conocimiento. Puedes continuar practicando preguntas relacionadas la próxima vez.
from collections import deque
class Solution:
"""
@param: numCourses: a total of n courses
@param: prerequisites: a list of prerequisite pairs
@return: true if can finish all courses or false
"""
def canFinish(self, numCourses, prerequisites):
# write your code here
queue = deque([])
edges = {i:[]for i in range(numCourses)}#出度
degrees = [0 for i in range(numCourses)]#入度
for i,j in prerequisites:
edges[j].append(i)
degrees[i] += 1
for i in range(numCourses):
if(degrees[i] == 0):
queue.append(i)
while(queue):
node = queue.popleft()
for i in edges[node]:
degrees[i] -= 1
if(degrees[i] == 0 ):
queue.append(i)
if(degrees == [0 for i in range(numCourses)]):#所有点的入度为零时,即能到达所有点
return True
else:
return False