#include<bits/stdc++.h>
using namespace std;
int n,m,i,j,maxt,b[110],d[110],e[110],a[110][110],c[110][110];
void dfs(int u,int t){
b[u]=t;
e[u]=1;
maxt=max(maxt,t);
for(int v=1;v<=n;v++)
if(e[v]==0&&a[u][v]&&(b[v]==0||b[v]<t+1))
dfs(v,t+1);
e[u]=0;
}
int main(){
int u,v;
while(scanf("%d%d",&n,&m)){
if(n==0&&m==0)break;
maxt=0;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(d,0,sizeof(d));
memset(e,0,sizeof(e));
for(i=1;i<=m;i++){
scanf("%d%d",&u,&v);
a[u][v]=1;
}
for(i=1;i<=n;i++)
if(!b[i])
dfs(i,1);
for(i=1;i<=n;i++)
c[b[i]][++d[b[i]]]=i;
for(i=1;i<=maxt;i++)
for(j=1;j<=d[i];j++)
printf("%d ",c[i][j]);
printf("\n");
}
return 0;
}
UVA 10305 Ordering Tasks
最新推荐文章于 2021-08-06 11:39:27 发布