@@ -60,29 +60,29 @@ To take course 1 you should have finished course 0, and to take course 0 you sho
6060## Python
6161### Solution 1: Breadth-First Search
6262``` python
63+ from collections import deque
64+
6365class Solution :
6466 def canFinish (self , num_courses : int , prerequisites : List[List[int ]]) -> bool :
67+ courses_list = [set () for _ in range (num_courses)] # index: course, value: courses depend on course
6568 in_degrees = [0 ] * num_courses
66- courses_list = [set () for _ in range (num_courses)] # index: course, value: courses depending on course
67-
68- for prerequisite in prerequisites:
69- in_degrees[prerequisite[0 ]] += 1
70- courses_list[prerequisite[1 ]].add(prerequisite[0 ])
7169
72- ok_courses = collections.deque()
70+ for course_item, course in prerequisites:
71+ courses_list[course].add(course_item)
72+ in_degrees[course_item] += 1
7373
74- for course, in_degree in enumerate (in_degrees):
75- if in_degree == 0 :
76- ok_courses.append(course )
74+ ok_course_queue = deque(
75+ [i for i, in_degree in enumerate (in_degrees) if in_degree == 0 ]
76+ )
7777
78- while ok_courses :
79- ok_course = ok_courses .popleft()
78+ while ok_course_queue :
79+ ok_course = ok_course_queue .popleft()
8080
8181 for course in courses_list[ok_course]:
8282 in_degrees[course] -= 1
83-
83+
8484 if in_degrees[course] == 0 :
85- ok_courses .append(course)
85+ ok_course_queue .append(course)
8686
8787 return sum (in_degrees) == 0
8888```
@@ -91,18 +91,14 @@ class Solution:
9191``` python
9292class Solution :
9393 def canFinish (self , num_courses : int , prerequisites : List[List[int ]]) -> bool :
94+ courses_list = [set () for _ in range (num_courses)] # index: course, value: courses depend on course
9495 in_degrees = [0 ] * num_courses
95- courses_list = [set () for _ in range (num_courses)] # index: course, value: courses depending on course
9696
9797 for prerequisite in prerequisites:
98- in_degrees[prerequisite[0 ]] += 1
9998 courses_list[prerequisite[1 ]].add(prerequisite[0 ])
99+ in_degrees[prerequisite[0 ]] += 1
100100
101- ok_courses = []
102-
103- for course, in_degree in enumerate (in_degrees):
104- if in_degree == 0 :
105- ok_courses.append(course)
101+ ok_courses = [i for i, in_degree in enumerate (in_degrees) if in_degree == 0 ]
106102
107103 while ok_courses:
108104 ok_course = ok_courses.pop()
@@ -122,7 +118,7 @@ class Solution:
122118class Solution {
123119 public boolean canFinish (int numCourses , int [][] prerequisites ) {
124120 var inDegrees = new int [numCourses];
125- var coursesList = new ArrayList<HashSet<Integer > > (); // index: course, value: courses depending on course
121+ var coursesList = new ArrayList<HashSet<Integer > > (); // index: course, value: courses depend on course
126122 for (var i = 0 ; i < numCourses; i++ ) {
127123 coursesList. add(new HashSet<Integer > ());
128124 }
@@ -166,7 +162,7 @@ class Solution {
166162class Solution {
167163 public boolean canFinish (int numCourses , int [][] prerequisites ) {
168164 var inDegrees = new int [numCourses];
169- var coursesList = new ArrayList<HashSet<Integer > > (); // index: course, value: courses depending on course
165+ var coursesList = new ArrayList<HashSet<Integer > > (); // index: course, value: courses depend on course
170166 for (var i = 0 ; i < numCourses; i++ ) {
171167 coursesList. add(new HashSet<Integer > ());
172168 }
@@ -212,7 +208,7 @@ class Solution {
212208public:
213209 bool canFinish(int num_courses, vector<vector<int >>& prerequisites) {
214210 auto in_degrees = vector<int >(num_courses);
215- auto courses_vector = vector<set<int >>(num_courses); // index: course, value: courses depending on course
211+ auto courses_vector = vector<set<int >>(num_courses); // index: course, value: courses depend on course
216212
217213 for (auto& prerequisite : prerequisites) {
218214 in_degrees[prerequisite[0]]++;
@@ -254,7 +250,7 @@ class Solution {
254250public:
255251 bool canFinish(int num_courses, vector<vector<int >>& prerequisites) {
256252 auto in_degrees = vector<int >(num_courses);
257- auto courses_vector = vector<set<int >>(num_courses); // index: course, value: courses depending on course
253+ auto courses_vector = vector<set<int >>(num_courses); // index: course, value: courses depend on course
258254
259255 for (auto& prerequisite : prerequisites) {
260256 in_degrees[prerequisite[0]]++;
@@ -302,7 +298,7 @@ public class Solution {
302298 public bool CanFinish (int numCourses , int [][] prerequisites )
303299 {
304300 var inDegrees = new int [numCourses ];
305- var coursesList = new List <HashSet <int >>(); // index: course, value: courses depending on course
301+ var coursesList = new List <HashSet <int >>(); // index: course, value: courses depend on course
306302
307303 for (int i = 0 ; i < numCourses ; i ++ )
308304 coursesList .Add (new HashSet <int >());
@@ -353,7 +349,7 @@ public class Solution {
353349 public bool CanFinish (int numCourses , int [][] prerequisites )
354350 {
355351 var inDegrees = new int [numCourses ];
356- var coursesList = new List <HashSet <int >>(); // index: course, value: courses depending on course
352+ var coursesList = new List <HashSet <int >>(); // index: course, value: courses depend on course
357353
358354 for (int i = 0 ; i < numCourses ; i ++ )
359355 coursesList .Add (new HashSet <int >());
0 commit comments