File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ class Solution {
2+ public:
3+
4+ bool cycle_find (vector < vector <int > > &graph, int numCourses){
5+
6+ // Create a vector to store indegrees of all
7+ // vertices. Initialize all indegrees as 0.
8+
9+ vector <int > in_degree (numCourses,0 );
10+
11+ for (int i = 0 ; i<numCourses; i++){
12+ for (int j = 0 ; j<graph[i].size (); j++){
13+ in_degree[graph[i][j]]++;
14+ }
15+ }
16+
17+ // Create an queue and enqueue all vertices with indegree 0
18+ queue <int > q;
19+ for (int i = 0 ; i<numCourses; i++){
20+ if (in_degree[i] == 0 ){
21+ q.push (i);
22+ }
23+ }
24+
25+ // Initialize count of visited vertices
26+ int cnt = 0 ;
27+
28+ // Create a vector to store result (A topological ordering of the vertices)
29+ vector<int > top_order;
30+
31+ while (!q.empty ()){
32+ int temp = q.front ();
33+ top_order.push_back (temp);
34+ q.pop ();
35+
36+ for (int i = 0 ; i<graph[temp].size (); i++){
37+ in_degree[graph[temp][i]]--;
38+ if (in_degree[graph[temp][i]] == 0 ){
39+ q.push (graph[temp][i]);
40+ }
41+ }
42+ cnt++;
43+ }
44+
45+ if (cnt != numCourses){
46+ return 0 ;
47+ }
48+ return 1 ;
49+ }
50+
51+ bool canFinish (int numCourses, vector<vector<int >>& prerequisites) {
52+
53+ vector < vector <int > > graph (numCourses);
54+ int n = prerequisites.size ();
55+
56+ for (int i = 0 ; i<n; i++){
57+ graph[prerequisites[i][0 ]].push_back (prerequisites[i][1 ]);
58+ }
59+ return cycle_find (graph,numCourses);
60+ }
61+ };
You can’t perform that action at this time.
0 commit comments