UVa 10305 - Ordering Tasks

来源:互联网 发布:mac 用户与群组 照片 编辑:程序博客网 时间:2024/05/16 12:43

题目:求出满足对应顺序的序列。

分析:图论、拓扑排序。知道起点用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;}