dfs实现
拓扑排序的结果又不唯一,别看到跟样例不一样就觉得自己错了嘛。
代码
#include<bits/stdc++.h>
using namespace std;
int n,m;
//
//edges
struct Edge
{
int to,next;
}edges[10010];
int head[110],tot;
void init()
{
memset(head,-1,sizeof(head));
tot=0;
}
void add(int from,int to)
{
edges[tot].to=to;
edges[tot].next=head[from];
head[from]=tot++;
}
/
int ans[110];
int t;
int vis[110];
bool dfs(int u)
{
vis[u]=-1;
for(int e=head[u];~e;e=edges[e].next)
{
int v=edges[e].to;
if(vis[v]==-1) return false;
if(!vis[v]&&!dfs(v)) return false;
}
vis[u]=1;
ans[t--]=u;
return true;
}
bool toposort()
{
for(int i=1;i<=n;i++)
if(!vis[i]&&!dfs(i)) return false;
return true;
}
int main()
{
while(scanf("%d %d",&n,&m)==2&&(n+m))
{
init();
memset(vis,0,sizeof(vis));
t=n;
int u,v;
while(m--)
{
scanf("%d %d",&u,&v);
add(u,v);
}
assert(toposort());
for(int i=1;i<=n;i++)
printf("%d%c",ans[i],i==n?'\n':' ');
}
return 0;
}