拓扑排序判断无向图中是否有环
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
void TopSort(vector<vector<int>>& grid, vector<int>& indegree){
queue<int> q;
for(int i=0; i<indegree.size(); ++i){
if(indegree[i]==0) q.push(i);
}
while(!q.empty()){
int u = q.front();
q.pop();
cout<<u<<" ";
for(int i=0; i<grid[u].size(); ++i){
if(grid[u][i]==1) {
--indegree[i];
if(indegree[i]==0){
q.push(i);
}
}
}
}
}
int main(){
vector<vector<int>> vec{{1,2},{0,2},{2,3},{2,4},{3,5},
{4,6},{6,5},{5,7},{6,7}, {7, 4}};
int n = 8;
vector<vector<int>> grid(n, vector<int>(n));
vector<int> indegree(n);
for(auto v : vec){
grid[v[0]][v[1]] = 1;
indegree[v[1]]++;
}
TopSort(grid, indegree);
}