您的位置:首页 > 运维架构

ural 1022. Genealogical Tree Topological sort

2015-08-20 14:34 531 查看
题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1022

题意描述:原文里里面的英文题目真是又臭又长,精简后的题意很简单,给定有向图的节点和每个节点的对应边,求一个拓扑排序结果;

直接上AC代码:

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdio.h>
#include <string>
#include <vector>
#include <queue>
#include <cmath>
#include <map>
using namespace std;

struct Node{
int parentCount;
vector<int>son;
Node() :parentCount(0){ son.clear(); }
};

void func(){

vector<Node>v;
size_t n, i, j, num;
Node node;

cin >> n;
v.resize(n, node);
for (i = 0; i < n; i++){
while (cin >> num&&num){
v[i].son.push_back(num - 1);
v[num - 1].parentCount++;
}
}

vector<int>ans;
queue<int>q;

for (i = 0; i < n; i++)
{
if (v[i].parentCount == 0)q.push(i);
}

while (!q.empty()){
num = q.front();
q.pop();
ans.push_back(num);

int len = v[num].son.size();
for (i = 0; i < len; i++){
j = v[num].son[i];
v[j].parentCount--;
if (v[j].parentCount == 0)
q.push(j);
}
}

cout << ans[0] + 1;
for (i = 1; i < n; i++)
cout << ' ' << ans[i] + 1;

}

int main(){

freopen("out.txt", "w", stdout);
freopen("in.txt", "r", stdin);

func();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: