拓扑排序判断有向图是否有回路

 根据拓扑排序中是否所有点都入队(可形成拓扑序)来判断是否有回路

​
​
#include
#include
#include
#include
using namespace std;
int main()
{
    queueq;
    int cnt = 0;
    vectorindegree(1000,0);                //数组记录每个点的入度
    vectorAdj[1000];                              //邻接表
    int n,m;
    cin >> n>>m;
    for (int i = 0; i < m; i++)
    {
        int u, v;
        cin >> u >> v;
        Adj[u].push_back(v);
        indegree[v]++;                                       //计算每个点的入度
    }
    for (int i =1;i <= n; i++)
    {
        if (indegree[i] == 0)
        {
            q.push(i);                                        //初始化,将所有入度为0的点放入队列
        }
    }
    while (!q.empty())
    {
        int u = q.front();
        for (int j = 0; j < Adj[u].size(); j++)
        {
            indegree[Adj[u][j]]--;                        //将队首指向的点的入度减一
        }
        for (int j = 0; j 

你可能感兴趣的:(拓扑学,c++)