#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=100+5;
int c[maxn];
int n;
int G[maxn][maxn];
int topo[maxn];
int t;
int m;
bool dfs(int u)
{
c[u]=-1;
for(int v=0;v<n;v++)
{
if(G[u][v])
{
if(c[v]==-1) return false;
if(!c[v]&&!dfs(v)) return false;
}
}
c[u]=1;topo[--m]=u;
return true;
}
bool toposort()
{
memset(c,0,sizeof(c));
int len=m;
for(int i=0;i<len;i++)
if(c[i]==0)
if(!dfs(i)) return false;
return true;
}
int main()
{
int u,v;
scanf("%d",&n);
scanf("%d",&t);
scanf("%d",&m);
int len=m;
memset(G,0,sizeof(G));
for(int i=0;i<t;i++)
{
scanf("%d%d",&u,&v);
G[u-1][v-1]=1;
}
if(toposort())
{
for(int i=0;i<len;i++)
printf("%d ",topo[i]+1);
printf("\n");
}
return 0;
}
拓扑排序
最新推荐文章于 2025-05-13 21:35:52 发布