UVA 10305

来源:互联网 发布:java如何编译运行 编辑:程序博客网 时间:2024/05/28 11:48
/*简单的拓扑排序*/#include <stdio.h>#include <stdlib.h>#include <string.h>#define M 200int t, n, m, data[M][M];int topo[M], c[M], data[M][M];int dfs( int u ){    int v;    c[u] = -1;    for( v = 1; v <= n; v++ )        if( data[u][v] )        {            if( c[v] < 0 )                return 0;            else if( !c[v] && !dfs(v) )                return 0;        }    c[u] = 1; topo[t--] = u;    return 1;}int main(){    int i, w, x, y, u;    while( scanf( "%d%d", &n, &m )  )    {if( m == 0 && n == 0 )//因为可能n = 1; m = 0break;//最开始写的是whiel( scanf(n,m) && n, m )  WA!!        memset(c, 0, sizeof(c) );        memset(data, 0, sizeof(data) );        while( m-- )        {            scanf( "%d%d", &x, &y );            data[x][y] = 1;        }        t = n;        for( u = 1; u <= n; u++ )            if( !c[u] )                dfs(u);        for( i = 1; i <= n-1; i++ )            printf( "%d ", topo[i] );printf( "%d\n", topo[n] );    }    return 0;}

原创粉丝点击