• 拓扑序列


    拓扑序列

    • 如果存在环,则一定不存在拓扑序列,有向无环图一定存在拓扑序列,所以有向无环图被称为拓扑图
    • 一个有向无环图一定至少存在一个入度为0的点
    • 有向图中每个点的入度(有几条边指向它) 出度(它指出几条边)
    • 用BFS实现
    const int N = 1e5+10;
    int head[N],e[2*N],ne[2*N],idx = 0;
    int n,m;
    //手写队列
    int q[N];
    //入度
    int indegree[N];
    void init()
    {
    	memset(head,-1,sizeof(head));
    	idx = 0;	
    }
    void add(int a,int b)
    {
    	e[idx] = b;
    	ne[idx] = head[a];
    	head[a] = idx;
    	idx ++;
    }
    bool topsort()
    {
    	int hh = 0, tt = -1;
    	//把所有入度为0的点入队
    	for(int i=1;i<=n;i++)
    		if(!indegree[i])
    			q[++ tt] = i;
    
    	while(hh <= tt)
    	{
    		int t = q[hh ++];
    		for(int i = head[t]; i != -1; i = ne[i])
    		{
    			int j = e[i];
    			indegree[j] -- ;
    			if(indegree[j] == 0)	q[++ tt] = j;
    		}
    	}
    	
    	return tt == n - 1;
    }
    int main()
    {
    	cin>>n>>m;
    	init();
    	for(int i = 0;i < m; i ++)
    	{
    		int a,b;
    		cin>>a>>b;
    		add(a,b);
    		indegree[b] ++ ;
    	}
    	if(topsort())
    	{
    		for(int i = 0; i < n; i++) cout<<q[i]<<' ';
    		cout<<endl;
    	}
    	else puts("-1");
    	return 0;
    }
    
  • 相关阅读:
    hdu1010
    hiho1041
    cg基础
    python下载网页转化成pdf
    QT笔记 -- (6) opengl
    QT笔记 -- (5) 实现QWidget的paintEvent函数,在widget上画背景图形
    程序媛成长之路--厚积薄发
    mysql集群搭建教程-基础篇
    JAVA遇见HTML——tomcat篇
    【DRP】——JSP+servlet
  • 原文地址:https://www.cnblogs.com/codertea/p/12803216.html
Copyright © 2020-2023  润新知