现在的位置: 首页 > 综合 > 正文

poj 2367 Genealogical tree

2014年11月08日 ⁄ 综合 ⁄ 共 554字 ⁄ 字号 评论关闭

裸的拓扑排序。

#include <iostream>
#include<stdio.h>
#include<cstring>
#include<vector>
using namespace std;
vector<int>a[105];
int from[105],to[105],flag[105];//出度,入度,标记是否访问过
int main()
{
   int n,temp;
   scanf("%d",&n);
   memset(from,0,sizeof(from));
   memset(to,0,sizeof(to));
   memset(flag,0,sizeof(flag));
   for(int i=1;i<=n;i++){
     while(scanf("%d",&temp),temp){
       a[i].push_back(temp);
       from[i]++;
       to[temp]++;
     }
   }
   int count=0;
   while(count!=n){
     for(int i=1;i<=n;i++){
       if(to[i]==0&&flag[i]==0){
         count++;
       printf("%d ",i);
       flag[i]=1;
       int len=a[i].size();
         for(int j=0;j<len;j++){
        to[a[i][j]]--;
         }
       }
     }
   }
   printf("\n");
    return 0;
}

抱歉!评论已关闭.