拓扑排序(模板)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了拓扑排序(模板)相关的知识,希望对你有一定的参考价值。

 
摘自:http://blog.csdn.net/lansetiankong_yiyi/article/details/5815097
 
#include<iostream>
#define MAX 501 using namespace std; int topo[501]; int graph[501][501]; int a,b; int n,m; int toposort(int n,int mat[][MAXN],int* ret)//n是点的个数,mat是邻接矩阵,ret是排序后的点列 { int d[MAXN],i,j,k; //d数组记录每个点的入度个数 for (i=0;i<n;i++) for (d[i]=j=0;j<n;d[i]+=mat[j++][i]); //这里是计算每个点的入度数 for (k=0;k<n;ret[k++]=i) { for (i=0;d[i]&&i<n;i++); //这里是寻找入度数为0的点 if (i==n) return 0; for (d[i]=-1,j=0;j<n;j++) d[j]-=mat[i][j]; // 入度数要减一 } return 1; } int main() { while(cin>>n>>m) { memset(graph,0,sizeof graph); for(int i=1;i<=m;i++) { cin>>a>>b; graph[a-1][b-1]=1; } toposort(n,graph,topo); for(int i=0;i<n;i++) { if(i) cout<< ; cout<<topo[i]+1; } cout<<endl; } }

 

以上是关于拓扑排序(模板)的主要内容,如果未能解决你的问题,请参考以下文章

AtCoderD - Restricted Permutation 拓扑排序模板题:拓扑排序+优先队列

拓扑排序

[模板]tarjan缩点+拓扑排序

拓扑排序 模板

拓扑排序模板

拓扑排序--确定比赛名次(模板题)