UVA 10305 - Ordering Tasks

#include<iostream>
#include<string.h>
#define N 105
using namespace std;

int n, m;
int c[N];
int topo[N], t;
int tt[N][N];

void dfs( int u)
{
int v;
c[u] = 1;
for( v = 1; v <= n; v ++)
if( tt[u][v] && !c[v] )
dfs( v);
topo[ -- t] = u;
}


int main()
{
int a, b, i;
while( cin >> n >> m)
{
if( !n && !m) break;
memset( tt, 0, sizeof( tt) );
for( int j = 0; j < m; j ++)
{
cin >> a >> b;
tt[a][b] = 1;
}
memset( c, 0, sizeof( c) );
t = n;
for( i = 1; i <= n; i ++)
if( !c[i] )
dfs(i);
for( i = 0; i < n - 1; i ++)
{
cout << topo[i] << "";
}
cout << topo[n-1] << endl;
}
return 0;
}

 这是道拓扑排序的基础题,我还是第一次做这样的题。

你可能感兴趣的:(order)