第三部分 數據結構 -- 第四章 圖論算法-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;
}

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