您的位置:首页 > 其它

hdu 1285 确定比赛名次_最简单的拓扑排序

2014-07-30 20:06 323 查看
//adjacent matrix 邻接矩阵
#include <iostream>
#include <cstring>

using namespace std;
#define MAXN 505
int Indegree[MAXN];//求点的入度
int top[MAXN][MAXN];标记两点之间的关系
int main()
{
    int i,j,k,n,m,w,v;
    while(cin>>n>>m)
    {
        memset(top,0,sizeof(top));
        memset(Indegree,0,sizeof(Indegree));
        while(m--)
        {
            cin>>w>>v;
            if(!top[w][v])
            {
                top[w][v]=1;
                Indegree[v]++;
            }

        }
        for(i=1; i<=n; i++)
            for(j=1; j<=n; j++)
                if(Indegree[j]==0)
                {
                    Indegree[j]=-1;
                    if(i==1)
                        cout<<j;
                    else
                        cout<<" "<<j;
                    for(k=1; k<=n; k++)
                        if(top[j][k]==1)
                        {
                            top[j][k]=0;
                            Indegree[k]--;
                        }
                        break;
                }
        cout<<endl;
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: