• POJ 1094 Sorting It All Out(拓扑排序)


    题意
    输入n, m,前者表示有多少个大写英文字母(从A开始),后者表示下面有多少个大小关系式子,然后根据给定的大小关系式子判断是否能得出他们的大小关系。若能求出,则说明从第几条式子起就已经可以确定关系;若存在矛盾,则说明从第几条式子起存在矛盾;若不能求出则直接说明。

    样例输入
    4 6
    A<B
    A<C
    B<C
    C<D
    B<D
    A<B
    3 2
    A<B
    B<A
    26 1
    A<Z
    0 0

    样例输出
    Sorted sequence determined after 4 relations: ABCD.
    Inconsistency found after 2 relations.
    Sorted sequence cannot be determined.

    思路
    题目重点在于要求出经过多少个式子后就能得出结论。因此,每读入一个式子就应进行一次拓扑排序。
    在拓扑排序的循环中,若每次循环只有一个入度为0的点,则说明大小关系已确定;否则说明大小关系无法确定。若拓扑排序,则说明存在回路,即大小关系存在矛盾。

    注意点
    先判断是否存在矛盾,再判断是否确定关系,最后才判断是否不能确定关系。

    举个例子
    6 6
    A<F
    B<D
    C<E
    F<D
    D<E
    E<F
    output:
    Inconsistency found after 6 relations.
    矛盾和多选同时存在时,优先判断是否矛盾

    5 5
    A<B
    B<C
    C<D
    D<E
    E<A
    output:
    Sorted sequence determined after 4 relations: ABCDE
    在矛盾之前如果有成功的,算是成功

     1 #include <cstdio>
     2 #include <cstdlib>
     3 #include <string.h>
     4 #include <queue>
     5 using namespace std;
     6 const int N = 26, M = 10000;
     7 int u[M], v[M], Next[M], first[N], in[N];
     8 bool TPSort(int n, int m, int time)
     9 {
    10     int topo[N], tempin[N];
    11     memcpy(tempin, in, sizeof(tempin));
    12     queue<int> q;
    13     for(int i=0; i<n; ++i)
    14         if(!tempin[i])
    15             q.push(i);
    16     bool ok = q.size() > 1 ? true : false;
    17     int num, x;
    18     for(num = 0; !q.empty(); ++num)
    19     {
    20         x = q.front();
    21         q.pop();
    22         for(int temp = first[x]; ~temp; temp = Next[temp])
    23             if(!--tempin[v[temp]])
    24                 q.push(v[temp]);
    25         if(!ok)
    26             ok = q.size() > 1 ? true : false;
    27         topo[num] = x;
    28     }
    29     if(num - n) //有环
    30     {
    31         printf("Inconsistency found after %d relations.
    ", time+1);
    32         return true;
    33     }
    34     else
    35     {
    36         if(ok)
    37             return false;
    38         printf("Sorted sequence determined after %d relations: ", time+1);
    39         for(int i=0; i<n; ++i)
    40             printf("%c", topo[i] + 'A');
    41         printf(".
    ");
    42         return true;
    43     }
    44 }
    45 int main(void)
    46 {
    47     //freopen("in.txt", "rt", stdin);
    48     //freopen("out.txt", "wt", stdout);
    49     int n, m;
    50     char str[4];
    51     while(scanf("%d %d", &n, &m), n+m)
    52     {
    53         memset(first, -1, sizeof(first));
    54         memset(in, 0, sizeof(in));
    55         if(m < n-1)
    56         {
    57             for(int i=0; i<m; ++i)
    58                 scanf("%s", str);
    59             printf("Sorted sequence cannot be determined.
    ");
    60             continue;
    61         }
    62         for(int i=0; i<m; )
    63         {
    64             scanf("%s", str);
    65             u[i] = str[0] - 'A';
    66             v[i] = str[2] - 'A';
    67             ++in[v[i]];
    68             Next[i] = first[u[i]];
    69             first[u[i]] = i;
    70             if(TPSort(n, m, i))
    71                 for(++i; i<m; ++i)
    72                     scanf("%s", str);
    73             else if(++i == m)
    74                 printf("Sorted sequence cannot be determined.
    ");
    75         }
    76     }
    77     return 0;
    78 }

    测试数据:

    4 6
    A<B
    A<C
    B<C
    C<D
    B<D
    A<B
    3 2
    A<B
    B<A
    26 1
    A<Z
    5 5
    A<B
    B<C
    C<D
    D<E
    E<A
    6 6
    A<F
    B<D
    C<E
    F<D
    D<E
    E<F
    4 6
    D<B
    D<A
    D<C
    C<A
    C<B
    A<B
    10 40
    C<I
    E<G
    A<J
    F<B
    D<E
    F<D
    C<B
    E<H
    G<I
    D<B
    C<H
    A<B
    J<I
    D<G
    A<E
    C<G
    E<B
    H<G
    C<A
    F<J
    B<G
    D<J
    E<J
    D<H
    C<F
    B<J
    G<J
    B<H
    D<A
    F<I
    A<H
    C<E
    F<H
    A<G
    B<I
    F<A
    H<J
    F<G
    F<E
    C<J
    15 60
    B<M
    M<H
    N<G
    N<E
    I<D
    B<D
    A<J
    O<D
    D<J
    F<E
    I<L
    F<B
    I<C
    C<E
    I<K
    I<J
    A<E
    B<L
    G<J
    A<G
    N<H
    H<J
    K<N
    K<E
    F<J
    C<D
    K<M
    G<L
    F<H
    M<L
    A<K
    B<K
    E<L
    B<H
    F<D
    M<E
    M<G
    N<L
    O<J
    D<H
    B<O
    B<C
    A<L
    I<B
    F<L
    C<L
    A<C
    N<O
    A<B
    F<C
    K<J
    C<G
    O<E
    I<O
    D<E
    I<N
    F<N
    M<J
    H<L
    N<D
    15 60
    B<M
    M<H
    N<G
    N<E
    I<D
    B<D
    A<J
    O<D
    D<J
    F<E
    I<L
    F<B
    I<C
    C<E
    I<K
    I<J
    A<E
    B<L
    G<J
    A<G
    N<H
    H<J
    K<N
    K<E
    F<J
    C<D
    K<M
    G<L
    F<H
    M<L
    A<K
    B<K
    E<L
    B<H
    F<D
    M<E
    M<G
    N<L
    O<J
    D<H
    O<B
    B<C
    A<L
    I<B
    F<L
    C<L
    A<C
    N<O
    A<B
    F<C
    K<J
    C<G
    O<E
    I<O
    D<E
    I<N
    F<N
    M<J
    H<L
    N<D
    26 325
    J<I
    L<P
    K<S
    M<X
    K<E
    H<W
    Z<S
    G<R
    F<R
    A<Y
    V<D
    P<X
    P<W
    M<S
    R<A
    G<V
    C<H
    O<R
    A<S
    N<C
    V<Y
    A<I
    F<Z
    V<Q
    V<R
    H<I
    Q<T
    M<Q
    F<A
    J<X
    M<D
    C<Q
    D<E
    V<F
    B<T
    X<U
    D<U
    G<Y
    V<B
    B<J
    N<U
    K<Z
    P<S
    E<U
    O<Y
    M<Z
    C<I
    F<S
    G<P
    O<J
    C<S
    W<U
    Z<Y
    D<L
    H<T
    B<Q
    X<W
    D<I
    K<B
    R<L
    L<X
    S<Q
    K<F
    B<R
    C<L
    O<B
    Y<S
    F<Y
    X<T
    S<U
    C<W
    O<P
    B<Z
    V<U
    C<X
    H<U
    O<U
    V<W
    D<A
    O<X
    G<D
    P<A
    D<X
    E<T
    S<T
    C<T
    H<O
    J<Q
    K<H
    Z<Q
    Z<W
    I<T
    J<A
    Z<E
    F<L
    Q<U
    J<S
    N<H
    J<E
    B<D
    M<I
    K<R
    Z<X
    B<Y
    P<Y
    R<E
    F<O
    R<P
    C<A
    D<Y
    D<Z
    B<X
    M<A
    I<Q
    K<J
    J<Z
    O<W
    H<R
    L<Q
    M<F
    W<T
    F<X
    F<E
    A<W
    N<J
    K<O
    H<S
    F<B
    V<K
    O<A
    R<U
    M<W
    M<K
    E<W
    C<D
    N<S
    S<E
    Y<I
    G<N
    F<P
    N<P
    G<W
    M<B
    J<W
    M<J
    X<Q
    Y<Q
    Y<E
    P<Q
    S<W
    J<T
    Z<U
    I<U
    M<Y
    F<Q
    V<Z
    J<D
    C<J
    K<Q
    A<Q
    M<U
    S<I
    C<O
    Z<I
    H<B
    G<A
    P<T
    G<F
    X<E
    B<U
    O<I
    C<F
    O<L
    N<V
    F<T
    J<L
    D<T
    R<S
    N<E
    L<T
    M<N
    O<D
    K<X
    V<L
    G<B
    O<E
    R<Y
    G<I
    O<Z
    G<U
    Z<L
    R<T
    N<Q
    C<Y
    M<C
    K<I
    O<S
    H<E
    R<X
    R<W
    H<J
    G<K
    E<I
    C<U
    H<A
    L<E
    N<F
    V<X
    N<W
    M<P
    H<F
    F<I
    R<Z
    K<T
    N<Y
    D<W
    G<J
    N<I
    G<S
    M<L
    N<X
    F<U
    L<Y
    G<H
    G<E
    D<S
    C<B
    V<P
    V<A
    V<I
    G<L
    B<L
    W<Q
    T<U
    N<D
    V<T
    P<I
    B<I
    N<Z
    P<E
    K<C
    E<Q
    K<D
    N<K
    B<E
    V<H
    G<T
    B<P
    V<J
    D<Q
    L<S
    M<T
    M<R
    K<A
    P<U
    N<A
    Z<A
    L<I
    V<E
    H<L
    K<Y
    A<T
    J<P
    C<R
    K<W
    M<H
    B<W
    N<T
    C<P
    G<Z
    R<D
    H<P
    Z<T
    X<S
    H<D
    G<O
    N<R
    L<W
    F<D
    H<Q
    R<I
    V<C
    V<O
    N<O
    L<U
    Z<P
    N<L
    C<E
    O<Q
    H<X
    F<J
    G<C
    D<P
    A<U
    A<E
    M<E
    J<Y
    I<W
    G<X
    L<A
    B<S
    N<B
    H<Y
    C<Z
    B<A
    Y<U
    X<A
    K<L
    Y<T
    R<J
    H<Z
    R<Q
    Y<W
    V<S
    X<Y
    G<Q
    K<U
    G<M
    M<V
    X<I
    J<U
    K<P
    M<O
    F<W
    O<T
    26 26
    A<B
    B<C
    C<D
    D<E
    E<F
    F<G
    G<H
    H<I
    I<J
    J<K
    K<L
    L<M
    M<N
    N<O
    O<P
    P<Q
    Q<R
    R<S
    S<T
    T<U
    U<V
    V<W
    W<X
    X<Y
    Y<Z
    Z<A
    5 10
    D<E
    A<D
    B<D
    B<C
    C<E
    D<C
    B<A
    A<C
    A<E
    B<E
    20 158
    I<L
    F<R
    I<C
    N<B
    C<K
    R<O
    E<D
    D<K
    F<S
    A<C
    J<E
    H<A
    N<D
    N<T
    H<I
    A<T
    M<S
    T<O
    P<Q
    G<J
    B<L
    N<I
    A<R
    T<S
    M<J
    B<J
    G<P
    N<E
    B<D
    N<F
    K<Q
    B<E
    E<O
    M<P
    M<F
    A<F
    H<S
    G<D
    P<J
    A<Q
    T<F
    G<F
    T<R
    L<Q
    A<J
    G<I
    H<O
    C<D
    P<L
    H<T
    T<E
    D<Q
    J<O
    A<M
    F<E
    E<K
    E<Q
    P<T
    C<E
    M<B
    T<J
    G<E
    N<K
    I<P
    M<Q
    H<M
    G<L
    I<J
    P<S
    A<K
    F<L
    T<L
    G<T
    I<Q
    B<O
    H<N
    M<G
    J<R
    C<B
    N<O
    T<D
    A<D
    L<S
    I<K
    R<Q
    M<E
    B<R
    O<Q
    R<D
    I<T
    T<Q
    I<D
    O<D
    N<Q
    A<S
    M<K
    H<G
    G<C
    H<E
    B<Q
    H<B
    G<S
    I<S
    I<R
    J<Q
    A<L
    F<Q
    J<D
    C<J
    H<L
    A<P
    F<K
    L<E
    I<O
    N<P
    E<S
    A<I
    C<R
    N<L
    T<B
    H<K
    R<K
    A<G
    C<Q
    J<K
    C<T
    P<B
    H<F
    O<K
    R<L
    O<S
    G<O
    M<I
    K<S
    F<O
    G<R
    B<S
    P<E
    T<K
    G<B
    A<O
    I<B
    P<C
    N<M
    J<F
    H<R
    F<D
    P<D
    H<P
    G<Q
    P<R
    L<K
    H<Q
    S<Q
    H<D
    C<O
    N<S
    N<A
    10 40
    E<J
    C<A
    G<J
    C<H
    G<I
    A<I
    D<I
    D<A
    G<E
    F<I
    A<J
    D<H
    E<B
    A<B
    D<E
    E<I
    D<C
    C<G
    F<A
    F<H
    D<B
    I<J
    I<B
    F<C
    J<B
    D<F
    G<H
    A<H
    I<H
    A<E
    E<H
    F<J
    H<B
    G<A
    G<F
    D<G
    F<E
    F<B
    C<B
    C<I
    20 70
    K<Q
    P<L
    I<C
    O<L
    I<M
    B<Q
    G<R
    J<E
    O<E
    J<C
    J<N
    H<T
    A<D
    G<B
    I<O
    S<K
    H<F
    J<L
    Q<C
    G<K
    J<B
    O<D
    P<K
    T<L
    E<D
    T<R
    R<L
    H<B
    F<L
    I<Q
    E<R
    P<M
    S<R
    T<C
    G<Q
    I<N
    G<C
    I<E
    R<N
    A<Q
    Q<M
    B<K
    A<R
    Q<R
    P<B
    E<N
    D<Q
    K<D
    S<F
    B<C
    B<T
    O<J
    S<M
    B<F
    R<M
    S<I
    S<T
    I<F
    H<D
    A<E
    P<T
    E<Q
    C<R
    K<C
    S<H
    B<L
    H<P
    E<F
    A<N
    O<B
    5 10
    D<C
    B<E
    B<D
    E<C
    A<E
    D<E
    A<B
    A<D
    A<C
    B<C
    10 20
    D<J
    C<A
    A<I
    J<G
    F<H
    F<J
    E<G
    F<D
    E<H
    C<J
    C<H
    E<J
    C<B
    D<G
    E<D
    F<G
    F<E
    A<H
    A<D
    J<H
    6 11
    A<B
    C<F
    B<F
    D<B
    B<E
    C<D
    A<F
    C<E
    F<E
    D<E
    A<C
    9 23
    I<A
    C<D
    B<D
    G<B
    F<D
    C<G
    I<F
    H<A
    C<E
    I<H
    B<A
    C<B
    I<E
    G<D
    H<C
    I<C
    D<E
    I<G
    B<F
    I<D
    H<G
    H<D
    C<F
    20 34
    J<C
    L<A
    S<D
    P<I
    R<I
    T<E
    L<O
    T<C
    O<C
    D<O
    S<I
    I<D
    B<G
    F<M
    T<M
    B<C
    H<M
    F<P
    Q<I
    F<O
    Q<J
    R<M
    E<M
    S<N
    B<N
    P<C
    L<E
    H<I
    D<C
    R<S
    Q<N
    P<E
    I<T
    E<D
    20 190
    B<E
    C<M
    N<S
    N<R
    O<K
    M<J
    B<J
    F<B
    G<B
    R<O
    Q<T
    Q<G
    D<G
    M<F
    C<T
    H<E
    D<B
    Q<F
    S<K
    A<P
    H<O
    H<S
    H<I
    P<S
    F<E
    F<T
    M<O
    A<O
    A<J
    R<K
    D<K
    H<N
    M<K
    Q<N
    P<E
    S<O
    P<O
    F<J
    N<D
    F<S
    C<D
    D<O
    A<S
    C<B
    Q<J
    F<P
    M<G
    R<J
    N<O
    L<I
    I<K
    B<O
    J<E
    C<J
    H<T
    Q<A
    Q<S
    L<B
    K<T
    O<T
    A<G
    H<G
    C<R
    P<B
    H<Q
    C<E
    A<E
    I<J
    R<F
    M<D
    H<D
    N<T
    C<O
    I<T
    D<R
    C<K
    H<P
    C<I
    C<P
    N<A
    R<B
    H<M
    R<I
    C<Q
    I<E
    Q<I
    Q<D
    C<S
    D<L
    N<B
    Q<K
    C<G
    P<J
    C<A
    J<T
    Q<L
    D<P
    R<G
    S<T
    H<K
    I<O
    D<E
    I<B
    P<K
    K<E
    N<G
    C<F
    M<T
    S<B
    A<K
    S<E
    A<F
    A<T
    P<G
    R<E
    D<I
    F<K
    I<S
    G<J
    H<F
    G<S
    L<F
    P<I
    M<L
    G<I
    N<P
    B<T
    L<P
    J<K
    C<H
    B<K
    A<I
    G<E
    G<T
    N<M
    M<B
    H<R
    D<J
    M<E
    F<G
    Q<M
    D<S
    H<B
    N<J
    Q<E
    G<O
    C<N
    H<A
    P<T
    Q<B
    L<S
    R<S
    N<L
    L<G
    Q<R
    F<O
    A<R
    L<E
    Q<P
    E<T
    M<R
    M<S
    L<O
    A<L
    R<P
    H<J
    L<K
    M<P
    A<M
    L<T
    R<T
    L<R
    S<J
    N<E
    F<I
    A<D
    D<F
    Q<O
    J<O
    O<E
    C<L
    A<B
    N<K
    N<F
    G<K
    D<T
    N<I
    H<L
    M<I
    L<J
    0 0
    in
    Sorted sequence determined after 4 relations: ABCD.
    Inconsistency found after 2 relations.
    Sorted sequence cannot be determined.
    Sorted sequence determined after 4 relations: ABCDE.
    Inconsistency found after 6 relations.
    Sorted sequence determined after 6 relations: DCAB.
    Sorted sequence determined after 29 relations: CFDAEBHGJI.
    Sorted sequence cannot be determined.
    Inconsistency found after 48 relations.
    Sorted sequence determined after 318 relations: GMNVKCHFOBRJDZLPXAYSEIWQTU.
    Sorted sequence determined after 25 relations: ABCDEFGHIJKLMNOPQRSTUVWXYZ.
    Sorted sequence determined after 7 relations: BADCE.
    Sorted sequence determined after 158 relations: HNAMGIPCTBJFRLEODKSQ.
    Inconsistency found after 35 relations.
    Sorted sequence cannot be determined.
    Sorted sequence determined after 7 relations: ABDEC.
    Sorted sequence cannot be determined.
    Sorted sequence determined after 11 relations: ACDBFE.
    Sorted sequence cannot be determined.
    Sorted sequence cannot be determined.
    Sorted sequence determined after 179 relations: CHQNAMDLRFPGISBJOKET.
    out
  • 相关阅读:
    java 计算文件 md5值
    前端项目结构
    路由器下连接路由器教程
    idea 中抽取部分代码
    idea 多行注释 Ctrl shift / 失效问题
    idea Ctrl+shift+F 快捷键失效原因
    Android studio 安装 jrebel for Android 下载不了问题
    利用C#创建和安装一个windows服务
    25条提高Visual Studio编码和调试效率的技巧
    IIS解决 上传文件大小限制
  • 原文地址:https://www.cnblogs.com/corvey/p/5240087.html
Copyright © 2020-2023  润新知