题目: 思路 拓扑排序的思想。定义一个栈,一个数组存储各个课程的入度,课程的入度为0时入栈,栈不为空时出栈。出栈一次,表示学习相应课程,记录相应数目,等于课程数目时表示可以学完所有课程。 代码: public class Solution { public bool CanFinish(int numCourses, int[][] prerequisites) { int len=prerequisites.Length; if(len==0)return true; Stack stack=new Stack(); int[]count=new int [numCourses];//用来存储各课程的入度 for(int i=0;i<len;i++) { count[prerequisites[i][0]]++;}//开始时各课程的入度 for(int i=0;i<numCourses;i++) { if(count[i]==0) stack.Push(i); } int m,result=0; while(stack.Count!=0) { m=(int)stack.Pop(); result++; for(int i=0;i<len;i++) { if(prerequisites[i][1]==m) { count[prerequisites[i][0]]--; if(count[prerequisites[i][0]]==0) {stack.Push(prerequisites[i][0]);} } } } return result==numCourses; } } 补充: