AC

键盘敲碎夜深沉,代码如麻乱假真 · 发布于 2024-08-03 · 浏览 515 回复 0
/*
入度为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;
}

全部回复 共 0 条

还没有人回复。往下写第一条。

发表回复