拓扑排序
•//拓扑排序,邻接阵形式,复杂度O(n^2)
•//如果无法完成排序,返回0,否则返回1,ret返回有序点列
•//传入图的大小n和邻接阵mat,不相邻点边权0
•#define MAXN 100
•int toposort(int n,int mat[][MAXN],int* ret){
• int d[MAXN],i,j,k;
• 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++);
• if (i==n)
• return 0;
• for (d[i]=-1,j=0;j<n;j++)
• d[j]-=mat[i][j];
• }
• return 1;
•}
------------------------------hdu 1258----------------------------------
•int main(int argc, char *argv[])
•{
• int map[501][501];
• int *p,data[501];
• int m,n,p1,p2;
• while(cin>>n>>m)
• {
• memset(map,0,sizeof(map));
•for(int i=1;i<=m;i++)
• {
• cin>>p1>>p2;
• map[p1-1][p2-1]=1;
•
• }
• p=data;
• toposort(n,map,p);
• for(int j=0;j<n-1;j++)
• cout<<*(p+j)+1<<" ";
• cout<<*(p+n-1)+1<<endl;
•
• }
• system("PAUSE");
• return EXIT_SUCCESS;
•}