当前位置:编程学习 > C/C++ >>

九度教程第81题

C语言源码:
[cpp]  
#include<stdio.h>  
#include<stdlib.h>  
#define maxsize 510  
int E[maxsize][maxsize];  
int q[maxsize*2];  
int indegree[maxsize];  
int cmp(const void *a,const void *b)  
{  
    return *(int *)a-*(int *)b;  
}  
int main()  
{  
    int m,n,a,b,i,j,num,front,rear;  
    while(scanf("%d %d",&n,&m)!=EOF)  
    {   www.zzzyk.com
        for(i=0;i<n;i++)  
        {  
            indegree[i]=0;  
            for(j=0;j<n;j++)  
                E[i][j]=0;  
        }  
        while(m>0)  
        {  
            m--;  
            scanf("%d %d",&a,&b);  
            if(E[a-1][b-1]!=1)  
            {  
                E[a-1][b-1]=1;  
                indegree[b-1]+=1;  
            }//这个题有个陷阱,假如一个对赢了另一个对好几次呢。。。  
        }  
        front=0;  
        rear=0;  
        for(i=0;i<n;i++)  
        {  
            if(indegree[i]==0)  
                q[rear++]=i;  
        }  
        qsort(q,rear,sizeof(q[0]),cmp);  
        num=1;  
        while(front!=rear)  
        {  
            i=q[front++];  
            if(num!=n)  
                printf("%d ",i+1);  
            else  
            {  
                printf("%d\n",i+1);  
                break;  
            }  
            num++;  
            for(j=0;j<n;j++)  
            {  
                if(E[i][j]!=0)  
                {  
                    indegree[j]--;  
                    if(indegree[j]==0)  
                        q[rear++]=j;  
                }  
            }  
            qsort(&q[front],rear-front,sizeof(q[front]),cmp);  
        }  
    }  
}  
 
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,