UVA

来源:互联网 发布:全套大富豪棋牌源码 编辑:程序博客网 时间:2024/06/15 19:45

拓扑排序模板题。
dfs型代码:

#include <iostream>#include <string>#include <cstdio>#include <cstring>#include <cmath>using namespace std;#define maxn 105int c[maxn], g[maxn][maxn];int topo[maxn], t, n;bool dfs(int u){    c[u] = -1;    for(int v = 0; 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 = 0; u < n; u++)    {        if(!c[u])        {            if(!dfs(u)) return false;        }    }    return true;}int main(){    int m;    while(cin >> n >> m && m+n)    {        memset(g, 0, sizeof(g));        for(int i = 1; i <= m; i++)        {            int a, b; cin >> a >> b;            g[a-1][b-1] = 1;        }        toposort();            for(int i = 0; i < n; i++)            {                if(!i) cout << topo[i]+1;                else cout << " " << topo[i]+1;            }            cout << endl;    }    return 0;}

队列型:

#include <cstdio>#include <cstring>#include <queue>using namespace std;const int maxn = 105;int n, m;int indegree[maxn] = {0}, gragh[maxn][maxn], res[maxn];void toposort(){    queue <int> q;    int cnt = 0;    for (int i = 0; i < n; i++)        if (indegree[i] == 0)            q.push(i);    while (!q.empty())    {        int tmp = q.front();        q.pop();        res[cnt++] = tmp;        for (int i = 0; i < n; i++)            if (gragh[tmp][i] != 0)                if (--indegree[i] == 0)                    q.push(i);    }    printf("%d", res[0] + 1);    for (int i = 1; i < cnt; i++)        printf(" %d", res[i] + 1);    printf("\n");}int main(){    while (scanf("%d%d", &n, &m) && (n || m))    {        memset(gragh, 0, sizeof(gragh));        memset(indegree, 0, sizeof(indegree));        int a, b;        for (int i = 0; i < m; i++)        {            scanf("%d%d", &a, &b);            gragh[a-1][b-1] = 1;            indegree[b-1]++;        }        toposort();    }    return 0;}


原创粉丝点击