♻️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;
}
评论:
请先登录,才能进行评论