hdu1285拓扑排序

#include<stdio.h>
#include<queue>
#define N 509
int in[N],sortq[N];
struct node{
   int v;
   int next;
}edg[N];
int heap[N],h;
void initi(int n)
{
    int i;
    for(i=0;i<=n;i++)
    {
        heap[i]=sortq[i]=-1;
        in[i]=0;
    }
    h=0;
}
void add(int a,int b)
{
    edg[h].v=b;
    edg[h].next=heap[a];
    heap[a]=h;
    h++;
}
int main()
{
    int n,m,c,k,id;
    int i,p1,p2,j;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        initi(n);
        for(i=0;i<m;i++)
        {
            scanf("%d%d",&p1,&p2);
            in[p2]++;
            add(p1,p2);
        }
        c=n;
        id=0;
    while(c){
        k=n;
        for(i=1;i<=n;i++)
        {
            if(in[i]==0&&i<k)
            {
                k=i;
            }
        }
        in[k]=-1;
        sortq[id++]=k;
        c--;
        for(j=heap[k];j!=-1;j=edg[j].next)
        {
            in[edg[j].v]--;
        }

    }
         printf("%d",sortq[0]);
    for(i=1;i<n;i++)
        printf(" %d",sortq[i]);
    puts("");
    }
}

    原文作者:拓扑排序
    原文地址: https://blog.csdn.net/imfenghui/article/details/30221383
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞