zoukankan      html  css  js  c++  java
  • 数据结构与算法--拓扑排序

    算法原理

    拓扑排序是对有向无环图的顶点的一种排序,它使得如果存在一条从Vi到Vj的路径,那么在排序中Vj出现在Vi的后面。典型的例子是大学厄选课,有向边(v,w)表明v必须在课程w选修前修完。
    

    算法实现

    1.先找出任意一个没有入度的顶点。
    2.显示出该顶点,并将它和它的边一起从图中删除
    3.对图的其余部分应用同样的方法处理
    

    代码实现

    #include <iostream>
    #include <cstring>
    #include <vector>
    #include <queue>
    
    using namespace std;
    const int MAX = 10240;
    int N,M,pDegree[MAX];
    queue<int> pMap[MAX],pVex;
    void TopSort();
    
    int main()
    {
    	cin >> N >>M;
    	memset(pDegree,0,sizeof(pDegree));
    	for(int i = 1;i <= M;i++ )
    	{
    		int s,e;
    		cin >> s >> e;
    		pMap[s].push_back(e);
    		pDegree[e]++;
    	}
    	TopSort();
    	return 0;
    }
    void TopSort()
    {
    	for(int i = 1;i <=N; i++)
    	{
    		if(pDegree[i] == 0)
    		{Q.push(i);}
    	}
    	while(!Q.empty())
    	{
    		int x = Q.front();
    		Q.pop();
    		pVec.push_back(x);
    		for(int i = 0;i < pMap[x].size();i++)
    		{
    			pDegree[pMap[x][i]]--;
    			if(pDegree[pMap[x][i]] == 00)
    			{Q.push(pMap[x][i]);}
    		}
    	}
    	for(int i = 1;i <= N; i++)
    	{
    		if(pDegree[i] != 0)
    		{
    			cout << "Exsit Loop" << endl;
    			return;
    		}
    	}
    	for(int i = 0;i < pVec.size();i++)
    	{count << pVec[i] << " ";}
    	cout << endl;
    }
  • 相关阅读:
    F12
    InnerClass.java
    Java8
    对象下—练习4
    对象下—练习3
    模板方法
    对象下—练习2
    对象下—举例二、三
    【J-Link】J-Link不支持(版本太低)
    【Android】安装插件 + 改变文字大小、颜色 + 隐藏代码区块的直线
  • 原文地址:https://www.cnblogs.com/y3w3l/p/6438881.html
Copyright © 2011-2022 走看看