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;
    }
  • 相关阅读:
    java+根据多个url批量下载文件
    js拖拽文件夹上传
    php文件夹上传
    java上传大文件解决方案
    web文件系统
    WebService之CXF注解之三(Service接口实现类)
    oracle 推断字符是否为字母
    二分查找算法
    C# 杀掉后台进程
    (个人开源)ffpanel --ffmpeg的GUI,让ffmpeg离开黑黑的命令行
  • 原文地址:https://www.cnblogs.com/y3w3l/p/6438881.html
Copyright © 2011-2022 走看看