Guest User

Untitled

a guest
Jun 24th, 2018
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.10 KB | None | 0 0
  1. public class Solution {
  2. private IList<IList<int>> graph;
  3. private bool[] marked;
  4. private bool[] onStack;
  5. private bool hasCycle;
  6.  
  7. public bool CanFinish(int numCourses, int[,] prerequisites) {
  8. graph = new List<IList<int>>();
  9. marked = new bool[numCourses];
  10. onStack = new bool[numCourses];
  11.  
  12. for (int i = 0; i < numCourses; i++) {
  13. graph.Add(new List<int>());
  14. }
  15.  
  16. int numEdges = prerequisites.Length >> 1;
  17. for (int i = 0; i < numEdges; i++) {
  18. graph[prerequisites[i, 1]].Add(prerequisites[i, 0]);
  19. }
  20.  
  21. for (int i = 0; i < numCourses; i++) {
  22. if (hasCycle) break;
  23. if (!marked[i]) dfs(i);
  24. }
  25.  
  26. return !hasCycle;
  27. }
  28.  
  29. private void dfs(int v) {
  30. marked[v] = true;
  31. onStack[v] = true;
  32.  
  33. foreach (int w in graph[v]) {
  34. if (!marked[w]) dfs(w);
  35. else if (onStack[w]) {
  36. hasCycle = true;
  37. return;
  38. }
  39. }
  40.  
  41. onStack[v] = false;
  42. }
  43. }
Add Comment
Please, Sign In to add comment