http://www.lintcode.com/en/problem/course-schedule/
There are a total of n courses you have to take, labeled from 0 to n - 1.
Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as a pair: [0,1]
Given the total number of courses and a list of prerequisite pairs, is it possible for you to finish all courses?
Answer:
class Solution { public: /* * @param numCourses: a total of n courses * @param prerequisites: a list of prerequisite pairs * @return: true if can finish all courses or false */ bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) { // Write your code here vector<vector<int>> adj(numCourses); vector<int> indegree(numCourses); for (int i = 0; i < numCourses; i++) indegree[i] = 0; for (auto pq : prerequisites) { adj[pq.first].push_back(pq.second); indegree[pq.second]++; } stack<int> st; for (int i = 0; i < numCourses; i++) { if (indegree[i] == 0) st.push(i); } int count = 0; while (!st.empty()) { int v1 = st.top(); st.pop(); count++; for (auto v2 : adj[v1]) { indegree[v2]--; if (indegree[v2] == 0) st.push(v2); } } return count == numCourses; } }