#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn = 1010;
int vNum;
vector<int> G[maxn];
int inDegree[maxn] = {0};//记录每个点的入度
int inqNum = 0;
bool topoSort(){
queue<int> Q;
for(int i=0;i<vNum;i++){
if(inDegree[i]==0){
Q.push(i);
}
}
while(!Q.empty()){
int u = Q.front();
Q.pop();
for(int i=0;i<G[u].size();i++){
int v = G[u][i];
inDegree[v] --;
if(inDegree[v]==0){
Q.push(v);
}
}
inqNum ++;
}
if(inqNum==vNum)return true;
else return false;
}
int main(){
int eNum;
scanf("%d %d",&vNum,&eNum);
int v1,v2;
while(eNum--){
scanf("%d %d",&v1,&v2);
inDegree[v2] ++;//v2不会是起点了
G[v1].push_back(v2);
}
if(topoSort())printf("该拓扑结构不含有环");
else printf("该拓扑结构含有环");
return 0;
}
设计一个算法,用深度优先遍历法对AOV网进行拓扑排序,检测其中是否存在环。
于 2021-12-11 11:42:58 首次发布