hdu1285拓扑排序

 

同样的又是复习,一道拓扑排序水题

 

 

代码:

#include<iostream>
#include<cstring>
using namespace std;
#define N 550
int map[N][N];
int indegree[N];
int ans[N];
void toposort(int n)
{
    int i,j,k;

    k=0;
    while(k<n)
    {
        for(i=1;i<=n;i++)
        {
            if(indegree[i]==0)
            {
                indegree[i]--;
                ans[k++]=i;
                for(j=1;j<=n;j++)
                {
                    if(map[i][j]) indegree[j]--;
                }
                break;                 // 这个很关键,找到一个就退出
            }
        }
    }
    return ;
}
int main()
{
    int n,m;
    int a,b;
    int i,tmp;


    while(cin>>n>>m)
    {
        memset(map,0,sizeof(map));
        memset(indegree,0,sizeof(indegree));
        for(i=0;i<m;i++)
        {
            cin>>a>>b;
            if(map[a][b]==0)
            {
                map[a][b]=1;
                indegree[b]++;        //入度
            }
        }

        toposort(n);

        tmp=n-1;
        for(i=0;i<tmp;i++)
            cout<<ans[i]<<' ';
        cout<<ans[i]<<endl;
    }
}


 

posted @ 2013-04-20 18:26  amourjun  阅读(125)  评论(0编辑  收藏  举报