题目:求出满足对应顺序的序列。
分析:图论、拓扑排序。知道起点用dfs效果更好,不知道可以暴力。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int edge[105][105];
int list[105];
int used[105];
int main()
{
int n,m,a,b;
while ( scanf("%d%d",&n,&m) && n ) {
for ( int i = 1 ; i <= n ; ++ i ) {
list[i] = 0;
used[i] = 0;
}
memset( edge, 0, sizeof(edge) );
for ( int i = 1 ; i <= m ; ++ i ) {
scanf("%d%d",&a,&b);
edge[a][b] = 1;
list[b] ++;
}
for ( int i = 1 ; i <= n ; ++ i ) {
int now = 0;
for ( int j = 1 ; j <= n ; ++ j )
if ( !used[j] && !list[j] ) {
used[j] = 1;
now = j;break;
}
for ( int j = 1 ; j <= n ; ++ j )
if ( edge[now][j] )
list[j] --;
printf("%d",now);
if ( i < n ) printf(" ");
else printf("\n");
}
}
return 0;
}