判断有向无环图DAG 用拓扑排序
统计每个节点的入度数和他的邻接节点。然后将入度为0的节点入队列,每出一个就把他的邻接节点的入度数减一。每出一个就把节点数量减一,最后判断其是否为0
1 class Solution { 2 public: 3 bool canFinish(int numCourses, vector<vector<int>>& prerequisites) { 4 vector<int> ins(numCourses,0); //入节点数组 5 vector<vector<int>> neighbor(numCourses);//每个节点的邻接节点 6 for(int i=0;i<prerequisites.size();i++) 7 { 8 ins[prerequisites[i][0]]+=1; 9 neighbor[prerequisites[i][1]].push_back(prerequisites[i][0]); 10 } 11 queue<int> nodes; 12 for(int i=0;i<numCourses;i++) 13 { 14 if(ins[i]==0) 15 { 16 nodes.push(i); 17 } 18 } 19 int count=numCourses; 20 while(!nodes.empty()) 21 { 22 int node=nodes.front(); 23 nodes.pop(); 24 count-=1; 25 for(int i=0;i<neighbor[node].size();i++) 26 { 27 ins[neighbor[node][i]]-=1; 28 if(ins[neighbor[node][i]]==0) 29 { 30 nodes.push(neighbor[node][i]); 31 } 32 } 33 } 34 return count==0; 35 } 36 };
每天进步一点点~