http://acm.pku.edu.cn/JudgeOnline/problem?id=2367

很水的拓扑排序,我DFS写的。

代码
#include <iostream>
#include 
<cstdio>
#include 
<cstring>
#include 
<vector>
using namespace std;
const int MAXN = 110;
vector 
<int> map[MAXN];
bool visited[MAXN];
int times = 0;
int f[MAXN];
void dfs(int v)
{
    visited[v] 
= true;
    
for(int i=0;i<map[v].size();i++)
    {
        
int next = map[v][i];
        
if(!visited[next])
        {
            dfs(next);
        }
    }
    f[times
++= v;
}
int main()
{
    
int n;
    memset(visited,
false,sizeof(visited));
    scanf(
"%d",&n);
    
for(int i=1;i<=n;i++)
    {
        
int to;
        
while(scanf("%d",&to)!=EOF&&to!=0)
        {
            map[i].push_back(to);
        }
    }
     
for(int i=1;i<=n;i++)
     {
            
if(!visited[i])
            {
                dfs(i);
            }
     }
    printf(
"%d",f[times-1]);
    
for(int i=times-2;i>=0;i--)
    {
        printf(
" %d",f[i]);
    }
    printf(
"\n");
    
return 0;
}