1 solutions

  • 0
    @ 2025-11-5 17:21:45

    C++ :

    #include<iostream>
    #include<cstring>
    using namespace std;
    int graph[100][100]; //邻接阵
    int indegree[100]; //记录顶点的入度
    int n; //n为顶点个数
    int main()
    {
        memset(graph,0,sizeof(graph));
    	memset(indegree,0,sizeof(indegree));
    	cin>>n;
    	int e;
    	for(int i=1;i<=n;i++)
    	{
    		while(cin>>e)
    		{
    			if(e!=0)
    			{
    		        graph[i][e]=1;
    		        indegree[e]++;
    		        continue;
    			}
    			else
    				break;
    		}
    	}
    	for(int i=1;i<=n;++i) //遍历n次每次找出一个顶点
        {
    		for(int j=1;j<=n;++j) //遍历所有的结点
    		{
    			if(indegree[j]==0)
    			{
    				indegree[j]--; //该顶点的入度为-1,防止该顶点被在此遍历到,相当于删除。
    				cout<<j<<' ';
    				for(int k=1;k<=n;++k)
    				{
    					if(graph[j][k])
    						indegree[k]--; //与该顶点关联的顶点的入度递减
    				}
    				break;
    			}
    		}
    	}
    	//while (1);
    }
    
    
    
    
    
    • 1

    Information

    ID
    18344
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By