1 条题解

  • 0
    @ 2024-12-24 10:06:06

    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

    信息

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