标签:degree sta 207 int graph 入度 numCourses 课程表
1 // 将先修关系构成一张图,由每个数对的第二个数字向第一个数字连边。 2 // 首先将所有入度为0的点进队,准备拓扑排序。 3 // 宽搜过程中,将当前结点所关联的结点的入度减1;若发现新的入度为0的结点,则将其进队。 4 // 最后如果遍历了所有结点,则说明可以满足要求;否则,先修关系存在环。 5 6 //查找是否有环 7 class Solution 8 { 9 public: 10 bool canFinish(int numCourses, vector<vector<int>>& prerequisites) 11 { 12 vector<vector<int>> graph(numCourses); 13 vector<int> in_degree(numCourses, 0); 14 for (int i = 0; i < prerequisites.size(); i++) 15 { 16 in_degree[prerequisites[i][0]]++; 17 graph[prerequisites[i][1]].push_back(prerequisites[i][0]); 18 } 19 20 queue<int> q; 21 vector<bool> vis(numCourses, false); 22 23 for (int i = 0; i < numCourses; i++) 24 if (in_degree[i] == 0) 25 q.push(i); 26 while (!q.empty()) 27 { 28 int sta = q.front(); 29 q.pop(); 30 vis[sta] = true; 31 //有哪些邻边 32 for (int i = 0; i < graph[sta].size(); i++) 33 { 34 in_degree[graph[sta][i]]--;// 入度-1 35 if (in_degree[graph[sta][i]] == 0) //入度如果为0,加入队列 36 q.push(graph[sta][i]); 37 } 38 } 39 40 //0->1->2 41 for (int i = 0; i < numCourses; i++) 42 if (vis[i] == false) 43 return false;//有环 44 return true;//无环 45 } 46 };
标签:degree,sta,207,int,graph,入度,numCourses,课程表 来源: https://www.cnblogs.com/yuhong1103/p/12632885.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。