美文网首页
模板-判断某有向图是否存在拓扑序列

模板-判断某有向图是否存在拓扑序列

作者: 余生筑 | 来源:发表于2019-03-16 10:27 被阅读0次
#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
const int MAXV=1001;
int N,M;
int in[MAXV],init[MAXV];
vector<int> Adj[MAXV];

//Topo()用于判断某有向图是否存在拓扑序列
bool Topo()
{
    int num=0;
    queue<int> q;
    for(int i=0; i<N; i++)
    {
        if(in[i]==0)
            q.push(i);
    }
    while(!q.empty())
    {
        int u=q.front();
        //printf("%d",u);//输出拓扑序列顶点(由头至尾),注意该函数在返回true情形下也只能产生唯一一个拓扑序列
        q.pop();
        for(int i=0; i<Adj[u].size(); i++)
        {
            int v=Adj[u][i];
            in[v]--;
            if(in[v]==0)
                q.push(v);
        }
        num++;
    }
    if(num==N)
        return true;
    return false;
}
int main()
{

    cin>>N>>M;
    int u,v;
    for(int i=0; i<M; i++)
    {
        cin>>u>>v;
        Adj[u-1].push_back(v-1);//储存出度顶点
        in[v-1]++;//统计入度数
    }
    if(Topo())
        cout<<"该图存在拓扑序列"<<endl;
    else
        cout<<"该图不存在拓扑序列"<<endl;
    return 0;
}
/*
输入:
6 8
1 2
1 3
5 2
5 4
2 3
2 6
3 4
6 4
输出:
该图存在拓扑序列


输入:
3 2
2 1
2 3
输出:
该图存在拓扑序列
*/

相关文章

  • 模板-判断某有向图是否存在拓扑序列

  • 18-拓扑排序

    拓扑排序## 拓扑排序是针对有向无环图定义的,此算法可以判断一个有向图是否存在回路。拓扑排序反应的是活动和工程的先...

  • 数据结构

    1.判断一个有向图是否有环? 深度优先搜遍历 拓扑排序

  • 图的拓扑排序算法

    拓扑排序:对一个有向图构造拓扑序列的过程。 关键概念定义 拓扑序列:设G=(V,E)是一个具有n个顶点的有向图,V...

  • 判断有向图是否有环

    方法一:拓扑排序 时间复杂度O(n^2) 比较常用的是用拓扑排序来判断有向图中是否存在环。 什么是拓扑排序呢?我们...

  • LeetCode 专题:拓扑排序

    知识点总结 拓扑排序并非一种排序算法,它能得到一个 AOV 网络的拓扑序列,用于判断有向无环图中是否有环,即可以判...

  • 数据结构与算法19-拓扑排序和关键路径

    拓扑排序 所谓的拓扑排序就是对一个有向图构建拓扑序列的过程那么什么是拓扑序列呢?设G = (V,E)是一个具有n个...

  • 数据结构与算法学习 (15)拓扑排序和关键路径

    拓扑排序所谓的拓扑排序就是对一个有向图构建拓扑序列的过程那么什么是拓扑序列呢?设G = (V,E)是一个具有n个顶...

  • 数据结构 图之拓扑排序

    拓扑排序 一、什么是拓扑排序? 在图论中,拓扑排序是一个有向无环图的所有顶点的线性序列,且该序列必须满足 每个顶点...

  • 210.课程表II!

    本题跟207的区别在于除了判断图是否有环外,还让你输出拓扑排序的一个序列。207的时候一直没闹明白dfs跟拓扑排序...

网友评论

      本文标题:模板-判断某有向图是否存在拓扑序列

      本文链接:https://www.haomeiwen.com/subject/zfujmqtx.html