介绍
Topological Sorting(拓扑排序) 主要用于有向无环图(DAG),用来排序点的先后关系或者判断该图是否有环
- 将所有入度为0的点放入栈或队列中
- 然后遍历栈中的点,将点的出度边删除
- 然后重复前两部直到没有点可以放入栈中
- 当出栈数 == 总点数,说明是DAG、
代码
class Solution { public: bool canFinish(int numCourses, vector<vector<int>>& prerequisites) { vector<int> inDegree(numCourses); unordered_map<int,vector<int>> edgeMap;
for(auto prerequisite : prerequisites) { ++inDegree[prerequisite[0]]; edgeMap[prerequisite[1]].emplace_back(prerequisite[0]); }
queue<int> q; for(int i = 0; i < numCourses; ++i) if(inDegree[i] == 0) q.push(i);
int count = 0; while(!q.empty()) { int now = q.front(); q.pop(); ++count; vector<int> nextCourses = edgeMap[now]; if(!nextCourses.empty()) { for(int i = 0; i < nextCourses.size(); ++i) { if(--inDegree[nextCourses[i]] == 0) q.push(nextCourses[i]); } } }
if(count == numCourses) return true; else return false; } };
|
参考