AC

♻️lzhh_lzhh32  •  3个月前


/*
入度为0辈分最高,先输出最老的,然后删除他们的出度 
然后同理 
*/ 
#include<bits/stdc++.h>
using namespace std;
vector<int> d[105];
int deg[105];		//统计每个节点入度的数组 
queue<int> q;	//放入每个入度为0的节点 
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		int num;
		for(cin>>num/*读一个数*/;num!=0/*判断是否为0*/;cin>>num){		//阴间写法 
			d[i].push_back(num);		//循环内添加边 
			deg[num]++;		//统计入度 
		}                                                                       
	}
	//接下来找入度为0,删边可以不实际删边,直接入度减1 
	for(int i=1;i<=n;i++){
		if(deg[i]==0) q.push(i);		//初始化队列:先把0压入 
	} 
	while(!q.empty()){
		int node=q.front();
		q.pop();
		cout<<node<<' '; 
		for(int i=0;i<d[node].size();i++){		
			deg[d[node][i]]--;		//删边 
			if(deg[d[node][i]]==0) q.push(d[node][i]);		//只须检查入度变小是否变为0,入度为0即压入队列 
		}
	}
	return 0;
}

评论:

请先登录,才能进行评论