10305:Ordering Tasks

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37754288/article/details/81417249

Ordering Tasks

这题比较简单,就是拓扑排序,而且肯定是有向无环图,直接DFS即可。

注意数据读取,只要 n 和 m 有一个不为0即可。。。

不考虑是否存在环:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 100 + 10;
int m,n,t;
int visited[maxn];
int order[maxn];
int A[maxn][maxn];
void DFS(int i){
    for(int j = 1;j <= n;j++){
        if(!visited[j] && A[i][j]) DFS(j);
    }
    order[t--] = i;
    visited[i] = 1;
}
void TopoSort(){
    for(int i = 1;i <= n;i++){
        if(!visited[i]) DFS(i);
    }
    for(int i = 1;i < n;i++) printf("%d ",order[i]);
    printf("%d\n",order[n]);
}
int main(){
    // freopen("data.in","r",stdin);
    // freopen("data.out","w",stdout);
    while(scanf("%d %d",&n,&m) && (n || m)){
        t = n;
        memset(A,0,sizeof(A));
        memset(visited,0,sizeof(visited));
        int a,b;
        for(int i = 0;i < m;i++){
            scanf("%d %d",&a,&b);
            A[a][b] = 1;
        }
        TopoSort();
    }
    return 0;
}

考虑是否存在环:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 100 + 10;
int m,n,t;
int visited[maxn];
int order[maxn];
int A[maxn][maxn];
bool DFS(int i){
    visited[i] = -1;
    for(int j = 1;j <= n;j++){
        if(A[i][j]){
            if(visited[j] < 0) return false;
            else if(!visited[j] && !DFS(j)) return false;
        }
    }
    order[t--] = i;
    visited[i] = 1;
    return true;
}
bool TopoSort(){
    for(int i = 1;i <= n;i++) if(!visited[i])
        if(!DFS(i)) return false;
    return true;
}
int main(){
    // freopen("data.in","r",stdin);
    // freopen("data.out","w",stdout);
    while(scanf("%d %d",&n,&m),n | m){
        t = n;
        memset(A,0,sizeof(A));
        memset(visited,0,sizeof(visited));
        int a,b;
        for(int i = 0;i < m;i++){
            scanf("%d %d",&a,&b);
            A[a][b] = 1;
        }
        TopoSort();
        for(int i = 1;i < n;i++) printf("%d ",order[i]);
        printf("%d\n",order[n]);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_37754288/article/details/81417249
今日推荐