拓扑排序

•//拓扑排序,邻接阵形式,复杂度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;
•}
posted @ 2012-09-18 22:12  兴安黑熊  阅读(155)  评论(3编辑  收藏  举报