@@ -61,22 +61,22 @@ class Solution:
61
61
def canFinish (self , numCourses : int , prerequisites : List[List[int ]]) -> bool :
62
62
edges = defaultdict(list )
63
63
indegree = [0 ] * numCourses
64
- for i, j in prerequisites:
65
- edges[j ].append(i )
66
- indegree[i ] += 1
64
+ for a, b in prerequisites:
65
+ edges[b ].append(a )
66
+ indegree[a ] += 1
67
67
q = deque()
68
68
for i in range (numCourses):
69
69
if indegree[i] == 0 :
70
70
q.append(i)
71
- cnt = 0
71
+ n = 0
72
72
while q:
73
- i = q.popleft()
74
- cnt += 1
75
- for j in edges[i ]:
76
- indegree[j ] -= 1
77
- if indegree[j ] == 0 :
78
- q.append(j )
79
- return cnt == numCourses
73
+ b = q.popleft()
74
+ n += 1
75
+ for a in edges[b ]:
76
+ indegree[a ] -= 1
77
+ if indegree[a ] == 0 :
78
+ q.append(a )
79
+ return n == numCourses
80
80
```
81
81
82
82
### ** Java**
@@ -92,27 +92,27 @@ class Solution {
92
92
}
93
93
int [] indegree = new int [numCourses];
94
94
for (int [] p : prerequisites) {
95
- edges[p[1 ]]. add(p[0 ]);
96
- ++ indegree[p[0 ]];
95
+ int a = p[0 ], b = p[1 ];
96
+ edges[b]. add(a);
97
+ ++ indegree[a];
97
98
}
98
99
Queue<Integer > q = new LinkedList<> ();
99
100
for (int i = 0 ; i < numCourses; ++ i) {
100
101
if (indegree[i] == 0 ) {
101
102
q. offer(i);
102
103
}
103
104
}
104
- int cnt = 0 ;
105
+ int n = 0 ;
105
106
while (! q. isEmpty()) {
106
- int i = q. poll();
107
- ++ cnt;
108
- for (int j : edges[i]) {
109
- -- indegree[j];
110
- if (indegree[j] == 0 ) {
111
- q. offer(j);
107
+ int b = q. poll();
108
+ ++ n;
109
+ for (int a : edges[b]) {
110
+ if (-- indegree[a] == 0 ) {
111
+ q. offer(a);
112
112
}
113
113
}
114
114
}
115
- return cnt == numCourses;
115
+ return n == numCourses;
116
116
}
117
117
}
118
118
```
@@ -159,29 +159,27 @@ public:
159
159
bool canFinish(int numCourses, vector<vector<int >>& prerequisites) {
160
160
vector<vector<int >> edges(numCourses);
161
161
vector<int > indegree(numCourses);
162
- for (auto p : prerequisites)
162
+ for (auto& p : prerequisites)
163
163
{
164
- edges[ p[ 1]] .push_back(p[ 0] );
165
- ++indegree[ p[ 0]] ;
164
+ int a = p[ 0] , b = p[ 1] ;
165
+ edges[ b] .push_back(a);
166
+ ++indegree[ a] ;
166
167
}
167
168
queue<int > q;
168
169
for (int i = 0; i < numCourses; ++i)
169
- {
170
- if (indegree[ i] == 0) q.push(i);
171
- }
172
- int cnt = 0;
170
+ if (indegree[ i] == 0)
171
+ q.push(i);
172
+ int n = 0;
173
173
while (!q.empty())
174
174
{
175
- int i = q.front();
175
+ int b = q.front();
176
176
q.pop();
177
- ++cnt;
178
- for (int j : edges[ i] )
179
- {
180
- --indegree[ j] ;
181
- if (indegree[ j] == 0) q.push(j);
182
- }
177
+ ++n;
178
+ for (int a : edges[ b] )
179
+ if (--indegree[ a] == 0)
180
+ q.push(a);
183
181
}
184
- return cnt == numCourses;
182
+ return n == numCourses;
185
183
}
186
184
};
187
185
```
@@ -193,76 +191,66 @@ func canFinish(numCourses int, prerequisites [][]int) bool {
193
191
edges := make([][]int, numCourses)
194
192
indegree := make([]int, numCourses)
195
193
for _, p := range prerequisites {
196
- edges[p[1]] = append(edges[p[1]], p[0])
197
- indegree[p[0]]++
194
+ a, b := p[0], p[1]
195
+ edges[b] = append(edges[b], a)
196
+ indegree[a]++
198
197
}
199
198
var q []int
200
199
for i := 0; i < numCourses; i++ {
201
200
if indegree[i] == 0 {
202
201
q = append(q, i)
203
202
}
204
203
}
205
- cnt := 0
204
+ n := 0
206
205
for len(q) > 0 {
207
- i := q[0]
206
+ b := q[0]
208
207
q = q[1:]
209
- cnt ++
210
- for _, j := range edges[i ] {
211
- indegree[j ]--
212
- if indegree[j ] == 0 {
213
- q = append(q, j )
208
+ n ++
209
+ for _, a := range edges[b ] {
210
+ indegree[a ]--
211
+ if indegree[a ] == 0 {
212
+ q = append(q, a )
214
213
}
215
214
}
216
215
}
217
- return cnt == numCourses
216
+ return n == numCourses
218
217
}
219
218
```
220
219
221
220
### ** C#**
222
221
223
222
``` cs
224
- using System .Collections .Generic ;
225
-
226
223
public class Solution {
227
224
public bool CanFinish (int numCourses , int [][] prerequisites ) {
225
+ var edges = new List <int >[numCourses ];
226
+ for (int i = 0 ; i < numCourses ; ++ i )
227
+ {
228
+ edges [i ] = new List <int >();
229
+ }
228
230
var indegree = new int [numCourses ];
229
- var edgeCount = prerequisites .Length ;
230
- var edge = new List <int >[numCourses ];
231
- for (var i = 0 ; i < edgeCount ; ++ i )
231
+ for (int i = 0 ; i < prerequisites .Length ; ++ i )
232
232
{
233
- var child = prerequisites [i ][0 ];
234
- var parent = prerequisites [i ][1 ];
235
- if (edge [parent ] == null )
236
- {
237
- edge [parent ] = new List <int >();
238
- }
239
- edge [parent ].Add (child );
240
- ++ indegree [child ];
233
+ int a = prerequisites [i ][0 ];
234
+ int b = prerequisites [i ][1 ];
235
+ edges [b ].Add (a );
236
+ ++ indegree [a ];
241
237
}
242
-
243
- var queue = new Queue <int >();
244
- for (var i = 0 ; i < numCourses ; ++ i )
238
+ var q = new Queue <int >();
239
+ for (int i = 0 ; i < numCourses ; ++ i )
245
240
{
246
- if (indegree [i ] == 0 ) queue .Enqueue (i );
241
+ if (indegree [i ] == 0 ) q .Enqueue (i );
247
242
}
248
-
249
- var count = 0 ;
250
- while (queue .Count > 0 )
243
+ var n = 0 ;
244
+ while (q .Count > 0 )
251
245
{
252
- var node = queue .Dequeue ();
253
- ++ count ;
254
- if ( edge [ node ] != null )
246
+ int b = q .Dequeue ();
247
+ ++ n ;
248
+ foreach ( int a in edges [ b ] )
255
249
{
256
- foreach (var next in edge [node ])
257
- {
258
- if (-- indegree [next ] == 0 )
259
- {
260
- queue .Enqueue (next );
261
- }
262
- }
250
+ if (-- indegree [a ] == 0 ) q .Enqueue (a );
263
251
}
264
252
}
265
- return count == numCourses ;
253
+ return n == numCourses ;
266
254
}
267
255
}
268
256
```
0 commit comments