UVA 10305 (拓扑排序)删边法+dfs

删边法:

#include <stdio.h>
#include<cstring>
#include<list>
#include<queue>
#include<vector>

using namespace std;

int main()
{
    int n,m;
    int in[105];
    while(scanf("%d%d",&n,&m)!=EOF&&n,m){
        memset(in,0,sizeof(in));
        list<int> li[105];
        int a,b;
        while(m--){
            scanf("%d%d",&a,&b);
            in[b]++;
            li[a].push_back(b);
        }
        queue<int> q;
        for(int i=1;i<=n;i++){
            if(!in[i]) q.push(i);
        }
        int flag=0;
        while(!q.empty()){
            int t=q.front();
            q.pop();
            if(!flag)
                printf("%d",t);
            else printf(" %d",t);
            flag=1;
            for(list<int>::const_iterator it=li[t].begin();it!=li[t].end();it++){
                in[*it]--;
                if(in[*it]==0){
                    q.push(*it);
                }
            }
            in[t]=-1;
        }
        printf("\n");
    }
    return 0;
}

dfs

#include <stdio.h>
#include<cstring>
#include<list>
#include<queue>
#include<vector>
#include<stack>

using namespace std;

const int maxn=100+5;

int n,m;
int visit[maxn];
int g[maxn][maxn];
int time;
int f[maxn];
stack<int> s;

void dfs(int u){
    visit[u]=1;
    time=time+1;
    for(int i=1;i<=n;i++){
        if(g[u][i]&&!visit[i]){
            if(f[i]>f[u]) break; //fail,存在反向边。
            dfs(i);
        }
    }
    f[u]=time;
    s.push(u);
}

int main()
{
    while(scanf("%d%d",&n,&m)!=EOF&&(n||m)){
        int a,b;
        time=0;
        memset(g,0,sizeof(g));
        memset(visit,0,sizeof(visit));
        memset(f,0,sizeof(f));
        while(!s.empty()) s.pop();
        while(m--){
            scanf("%d%d",&a,&b);
            g[a][b]=1;
        }
        for(int i=1;i<=n;i++){
            if(!visit[i]) dfs(i);
        }
        while(!s.empty()){
            printf("%d",s.top());
            printf("%c",s.size()==1?'\n':' ');
            s.pop();
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40679299/article/details/80657960