码迷,mamicode.com
首页 > 编程语言 > 详细

拓扑排序(模板)

时间:2016-05-21 13:00:20      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:

 
摘自: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; } }

 

拓扑排序(模板)

标签:

原文地址:http://www.cnblogs.com/burning-flame/p/5514387.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!