Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Graph:
- def __init__(self,x,mylist):
- self.label=x
- self.neighbors=mylist
- class Solution:
- """
- @param: numCourses: a total of n courses
- @param: prerequisites: a list of prerequisite pairs
- @return: the course order
- """
- def findOrder(self, numCourses, prerequisites):
- # write your code here
- if len(prerequisites)==0:
- return [i for i in range(numCourses)]
- all_course=[[i] for i in range(numCourses)]
- for i in range(len(prerequisites)):
- all_course[prerequisites[i][0]].append(prerequisites[i][1])
- start_point=False
- graphs=[]
- for i in range(len(all_course)):
- #temp_graph=Graph(i)
- if len(all_course[i])>1:
- graphs.append(Graph(i,all_course[i][1:]))
- else:
- start_point=True
- graphs.append(Graph(i,[]))
- #print(graphs[0].label)
- if not start_point:
- return []
- course_taken={}
- course_order=[]
- def topsort(mygraph):
- if mygraph.label in course_taken:
- return
- if len(mygraph.neighbors)>0:
- for i in range(len(mygraph.neighbors)):
- topsort(mygraph.neighbors[i])
- course_taken[mygraph.label]=1
- course_order.append(mygraph.label)
- for i in range(len(graphs)):
- #print(graphs[i][0])
- topsort(graphs[i])
- if len(course_taken)==numCourses:
- break
- return course_order[::-1]
Advertisement
Add Comment
Please, Sign In to add comment