• PAT 甲级 1146 Topological Order (25 分)


    思路:

    1.一个简单的求拓扑排序(Topological Order)的算法是找出任意一个入度为0的顶点,然后删去该顶点,然后对图的剩余部分做相同的操作,删去的顶点序列即是一个拓扑序列;
    2.根据题目所给的有向边,用数组存储每个顶点的入度,用vector数组存储每个顶点下一个可达顶点(有多个可达顶点);
    3.根据需要查询的序列,从前往后,每个顶点的入度都要为0,每试一个顶点且此顶点符合要求,此顶点的下一个可达顶点的入度都减一;若有一个不符合则输出该轮次序号;

    代码:

    #include<iostream>
    #include<vector>
    using namespace std;
    int main()
    {
    	int n,m,k;
    	scanf("%d%d",&n,&m);
    	vector<int> v[1001],notTopo,vin(n+1);
    	for(int i=0;i<m;i++)
    	{
    		int v1,v2;
    		scanf("%d%d",&v1,&v2);
    		vin[v2]++;
    		v[v1].push_back(v2);
    	}
    	scanf("%d",&k);
    	for(int i=0;i<k;i++)
    	{
    		int ver,sign=1;
    		vector<int> vinn(vin);
    		for(int j=0;j<n;j++)
    		{
    			scanf("%d",&ver);
    			if(vinn[ver]&&sign)
    			{
    				notTopo.push_back(i);
    				sign=0;
    			}
    			else if(!vinn[ver]&&sign)
    				for(auto k:v[ver]) vinn[k]--;
    		}
    	}
    	printf("%d",notTopo[0]);
    	for(int i=1;i<notTopo.size();i++) printf(" %d",notTopo[i]);
    	return 0;
    }
    
  • 相关阅读:
    透视投影矩阵的推导
    选择排序
    递归运动函数的实现
    插入排序
    基本光照模型
    顶点法向量从物体坐标系变换到世界坐标系
    Phong和BlinnPhong光照模型
    unity3d使用脚本保存屏幕截图
    【转】C++11常用特性的使用经验总结
    右手坐标系下LookAt视图矩阵的推导
  • 原文地址:https://www.cnblogs.com/yuhan-blog/p/12309097.html
Copyright © 2020-2023  润新知