1 条题解

  • 0
    @ 2025-12-11 14:41:48

    C :

    #include <stdio.h>
    int a[510][510];
    int main()
    {
    	int n,m,i,j,u,v,n1,k;
    	while (scanf("%d %d",&n,&m)&&n)
    	{
    		for (i=0;i<=n;i++)
    			for (j=1;j<=n;j++)
    			{
    				if (i==0) a[i][j]=1;
    				else a[i][j]=0;
    			}
    		for (i=0;i<m;i++)
    		{
    			scanf("%d %d",&u,&v);
    			a[u][v]++;
    		}
    		n1=n;
    		while (n1--)
    		{
    			for (i=1;i<=n;i++)
    			{
    				if (a[0][i]==1)
    				{
    					for (j=1;j<=n;j++)
    						if (a[j][i]!=0) break;
    				}
    				if ((j==n+1)&&(a[0][i]==1)) 
    				{
    					a[0][i]=0;
    					for (k=1;k<=n;k++)
    					{
    						if (a[i][k]!=0)
    							a[i][k]--;
    					}
    					if (n1>0) printf("%d ",i);
    					else printf ("%d\n",i);
    					break;
    				}
    			}
    		}
    	}
    	return 0;
    }
    

    C++ :

    #include <stdio.h>
    #include <vector>
    #include <queue>
    using namespace std;
    
    int indegree[505];
    vector<int> edge[505];
    priority_queue<int , vector<int> , greater<int> > Q;
    
    int main()
    {
    	int output[505];
    	int n,m,i;
    	while(scanf("%d%d",&n,&m)!=-1)
    	{
    		if(n==0 && m==0)
    			break;
    		
    		for(i=1;i<=n;i++)
    		{
    			indegree[i]=0;
    			edge[i].clear();
    			output[i]=0;
    		}
    		
    		while(m--)
    		{
    			int a,b;
    			scanf("%d%d",&a,&b);
    			edge[a].push_back(b);
    			indegree[b]++;
    		}
    		
    		while(!Q.empty())
    			Q.pop();
    		
    		for(i=1;i<=n;i++)
    		{
    			if(indegree[i]==0)
    				Q.push(i);
    		}
    		
    		int size=0;
    		while(!Q.empty())
    		{
    			int tmp=Q.top();
    			Q.pop();
    			output[size++]=tmp;
    			for(i=0;i<edge[tmp].size();i++)
    			{
    				indegree[edge[tmp][i]]--;
    				if(indegree[edge[tmp][i]]==0)
    					Q.push(edge[tmp][i]);
    			}
    		}
    		
    		for(i=0;i<size;i++)
    		{
    			if(i)
    				printf(" %d",output[i]);
    			else
    				printf("%d",output[i]);
    		}
    		
    		printf("\n");
    	}
    	return 0;
    }
    

    信息

    ID
    877
    时间
    1000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者