第三部分 数据结构 -- 第四章 图论算法-1351:【例4-12】家谱树

1351:【例4-12】家谱树

时间限制: 1000 ms 内存限制: 65536 KB
提交数: 2201 通过数: 1594
【题目描述】
有个人的家族很大,辈分关系很混乱,请你帮整理一下这种关系。

给出每个人的孩子的信息。

输出一个序列,使得每个人的后辈都比那个人后列出。

【输入】
第1行一个整数N(1≤N≤100),表示家族的人数;

接下来N行,第I行描述第I个人的儿子;

每行最后是0表示描述完毕。

【输出】
输出一个序列,使得每个人的后辈都比那个人后列出;

如果有多解输出任意一解。

【输入样例】
5
0
4 5 1 0
1 0
5 3 0
3 0
【输出样例】
2 4 5 3 1


思路:使用拓扑排序算法

#include<cstdio>
#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
vector<int> p[1005];
int indege[1500];
int n;
int vis[1500];
queue<int>q;
void topsort(){
	for(int i = 1; i <= n; i++){

	if(!indege[i])	q.push(i);
		}
		while(!q.empty()){
			int u = q.front();
			q.pop();
			cout << u << " ";
			for(int i  = 0; i < p[u].size();i++)
			{
				if(--indege[p[u][i]] == 0)
				q.push(p[u][i]);
			}
		}
}

int main(){
	ios::sync_with_stdio(false);
	memset(indege,0,sizeof(indege));
	memset(vis,0,sizeof(vis));
	cin >> n;
	for(int i = 1; i <= n; i++)
	{
		int x;
		while(cin >> x, x != 0 )
		{
			p[i].push_back(x);
			indege[x]++;
		}
	 } 
	topsort();
	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章