DFS实现
#include <iostream>
#include <cstdio>#include <cstring>
#include <queue>
using namespace std;
const int MAXN=100;
int G[MAXN][MAXN],vis[MAXN],topo[MAXN];
int t,m,n;
bool dfs(int u)
{
vis[u]=-1;
for(int v=1;v<=n;v++)
if(G[u][v])
{
if(vis[v]<0)
return false;
else if(!vis[v]&&!dfs(v))
return false;
}
vis[u]=1;
topo[t--]=u;
return true;
}
bool toposort()
{
t=n;
memset(vis,0,sizeof(vis));
for(int u=1;u<=n;u++)
if(!vis[u]&&!dfs(u))
return false;
return true;
}
int main()
{
freopen("in.txt","r",stdin);
while(cin>>n>>m&&n&&m)
{
int u,v;
memset(G,0,sizeof(G));
for(int i=1;i<=m;i++)
{
cin>>u>>v;
G[u][v]=1;
}
if(toposort())
{
for(int i=1;i<=n;i++)
printf("%d ",topo[i]);
printf("\n");
}
else
printf("no answer\n");
}
return 0;
}