#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#define MAX 110
typedef struct nn{
int data[MAX];
int top;
}nn;
nn ms;
int vis[MAX];
int mp[MAX][MAX];
int res[MAX];
int flag,n,fla;
int check(int x)
{
int i;
for(i=0;i<=n;i++)
{
if(mp[i][x]==1)
return 1;
}
return 0;
}
int main()
{
int i,x,y,j;
while(scanf("%d",&n)!=EOF)
{
ms.top=-1;
flag=fla=0;
for(x=1;x<=n;x++)
for(y=1;y<=n;y++)
mp[x][y]=0;
for(i=1;i<=n;i++)
{
while(scanf("%d",&x)!=EOF&&x)
{
mp[i][x]=1;
}
}
for(i=1;i<=n;i++)
{
if(check(i))
{
ms.top++;
ms.data[ms.top]=i;
}
else
{
vis[i]=1;
for(j=1;j<=n;j++)
{
mp[i][j]=0;
}
res[fla++]=i;
}
}
while(ms.top>-1)
{
if(check(ms.data[ms.top])==0)
{
for(j=1;j<=n;j++)
mp[ms.data[ms.top]][j]=0;
res[fla++]=ms.data[ms.top];
ms.top--;
}
}
for(i=0;i<fla;i++)
{
printf("%d",res[i]);
if(i==fla-1)
printf("\n");
else
printf(" ");
}
}
return 0;
}
特别注意他输入的时候是第一行输入以1位前置的数字,这里是个大坑
POJ2367拓扑排序入门
最新推荐文章于 2020-07-06 22:23:24 发布