网站上如何做相关推荐,漳州seo顾问,杭州百度代理公司,wordpress functions.php 路径思路#xff1a;拓补排序
其实就是对于第一个题的问题变了一个问法#xff0c;上一个题本质上是求有没有环#xff0c;这道题本质上就是让你求出来符合没有环的路径输出而已#xff0c;本质上没有什么区别。
不同就在于这里需要你额外开一个数组用来存储你遍历这个有向图…思路拓补排序
其实就是对于第一个题的问题变了一个问法上一个题本质上是求有没有环这道题本质上就是让你求出来符合没有环的路径输出而已本质上没有什么区别。
不同就在于这里需要你额外开一个数组用来存储你遍历这个有向图的路径。
注意并不是说存储返回就完事了因为所给的数据有可能是不构成拓补排序的要求的我们需要判断一下这个图是不是有向无环图如果是那么拓补排序是可以的不是的话我们在存储路径的时候会重复一个环的点导致输出错误。
这里的判断有没有环其实就是用一个计数器判断是不是符合全部点都遍历不出现重复的情况下。
上代码
class Solution {
public:vectorint findOrder(int numCourses, vectorvectorint prerequisites) {vectorvectorints(numCourses);vectorintcounts(numCourses,0);for(int i0;iprerequisites.size();i){s[prerequisites[i][1]].push_back(prerequisites[i][0]);counts[prerequisites[i][0]];}queueintq;vectorintres;int cnt0;for(int i0;inumCourses;i){if(counts[i]0){q.push(i);res.push_back(i);}}while(!q.empty()){int tmpq.front();q.pop();cnt;for(int i:s[tmp]){if(--counts[i]0){q.push(i);res.push_back(i);}}}if(cntnumCourses){return res;}else{return {};}}
};