//拓扑排序的模板
#include <stdio.h>
#include <string.h>
struct data
{
int in; // 某点的入度
int out; // 某点的出度
}s[];
int a,b,n,stk[];
bool map[][];
void push(int k);
{
stk[++top] = k;
}
void Solve()
{
int i,j;
bool flg = 1;
while(flg)
{
flg = 0;
for(i=1;i<=n;i++)
if(!s[i].in)
{
flg = 1;
push(i);
for(j=1;j<=n;j++)
if(map[i][j])
s[j].in--;
}
}
}
void Output() //输出拓扑排序的结果
{
int i;
for(i=1;i<=top;i++)
printf("%d ",stk[i]);
}
int main()
{
memset(map,0,sizeof(map));
memset(s,0,sizeof(s));
for(i=1;i<=n;i++)
{
scanf("%d%d",&a,&b);
s[a].out++;
s[b].in++;
map[a][b] = 1;
}
top = 0;
Solve();
Output();
return 0;
}
#include <stdio.h>
#include <string.h>
struct data
{
int in; // 某点的入度
int out; // 某点的出度
}s[];
int a,b,n,stk[];
bool map[][];
void push(int k);
{
stk[++top] = k;
}
void Solve()
{
int i,j;
bool flg = 1;
while(flg)
{
flg = 0;
for(i=1;i<=n;i++)
if(!s[i].in)
{
flg = 1;
push(i);
for(j=1;j<=n;j++)
if(map[i][j])
s[j].in--;
}
}
}
void Output() //输出拓扑排序的结果
{
int i;
for(i=1;i<=top;i++)
printf("%d ",stk[i]);
}
int main()
{
memset(map,0,sizeof(map));
memset(s,0,sizeof(s));
for(i=1;i<=n;i++)
{
scanf("%d%d",&a,&b);
s[a].out++;
s[b].in++;
map[a][b] = 1;
}
top = 0;
Solve();
Output();
return 0;
}