拓扑排序

来源:互联网 发布:2016世界网络大会 编辑:程序博客网 时间:2024/06/05 14:14
拓扑排序   模板
#include <cstdio>#include <cstring>const int maxn = 110;int n, m;int G[maxn][maxn], topo[maxn];int c[maxn], t;bool dfs(int u){    c[u] = -1;    for(int v = 1; v <= n; v++)        if(G[u][v])        {            if(c[v] < 0)   return false;            else if(!c[v] && !dfs(v))   return false;        }    c[u] = 1;    topo[--t] = u;    return true;}bool toposort(){    t = n;    memset(c, 0, sizeof(c));    for(int u = 1; u <= n; u++)        if(!c[u])            if(!dfs(u))  return false;    return true;}int main(){    while(scanf("%d%d", &n, &m) != EOF )    {        if(!m && !n)   break;        int u, v;        memset(G, 0, sizeof(G));        while(m--)        {            scanf("%d%d", &u, &v);            G[u][v] = 1;        }        toposort();        for(int i = 0; i < n; i++)        {            printf("%s", i ? " " : "");            printf("%d", topo[i]);        }        printf("\n");    }    return 0;}


0 0
原创粉丝点击