Sorting It All Out
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 29539   Accepted: 10233

Description

An ascending sorted sequence of distinct values is one in which some form of a less-than operator is used to order the elements from smallest to largest. For example, the sorted sequence A, B, C, D implies that A < B, B < C and C < D. in this problem, we will give you a set of relations of the form A < B and ask you to determine whether a sorted order has been specified or not.

Input

Input consists of multiple problem instances. Each instance starts with a line containing two positive integers n and m. the first value indicated the number of objects to sort, where 2 <= n <= 26. The objects to be sorted will be the first n characters of the uppercase alphabet. The second value m indicates the number of relations of the form A < B which will be given in this problem instance. Next will be m lines, each containing one such relation consisting of three characters: an uppercase letter, the character "<" and a second uppercase letter. No letter will be outside the range of the first n letters of the alphabet. Values of n = m = 0 indicate end of input.

Output

For each problem instance, output consists of one line. This line should be one of the following three:

Sorted sequence determined after xxx relations: yyy...y.

Sorted sequence cannot be determined.

Inconsistency found after xxx relations.

where xxx is the number of relations processed at the time either a
sorted sequence is determined or an inconsistency is found, whichever
comes first, and yyy...y is the sorted, ascending sequence.

Sample Input

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

Sample Output

Sorted sequence determined after 4 relations: ABCD.
Inconsistency found after 2 relations.
Sorted sequence cannot be determined.

Source

网上讲解参考代码

/**  这道题WA了好久,其中有几个需要注意的地方
1、当出现正好存在一种情况能够排序完所有节点时,不管以后的边会出现什么情况,都输出
    能够排序成功
2、当中间的拓扑排序过程中出现多个几点的入度为0时,只记录当时的状态
    (亦即该测试数据要么出现环,要么就是有多组解),不能立即返回,
    要继续读边,直到能够排序完成(此时输出有多解的情况)或者出现环。
*/
#include<cstdio>
#include<iostream>
#include<cstring>

using namespace std;

bool G[30][30];
int d[30];
char s[30];
int n;
int toposort()
{
    int num,k,i,j,t;
    int td[30];
    bool flag1=true;
    for(i=1;i<=n;++i)
        td[i]=d[i];
    memset(s,0,sizeof(0));
    for(j=0;j<n;++j)
    {
        num=0;
        for(i=1;i<=n;++i)
        {
            if(td[i]==0)
            {
                k=i;
                ++num;
            }
        }
        if(num==0)    //有环
            return -1;
        if(num>1)  //有多种情况,还需继续读边判断
        {
            flag1=false;
        }
        s[j]='A'+k-1;
        td[k]--;
        for(t=1;t<=n;++t)
        {
            if(G[k][t])
                --td[t];
        }
    }
    s[n]='\0';
    if(flag1==false)  //情况不唯一
        return 0;
    return 1;      //全部排好序了返回1.
}

int main()
{
    int m,i,ans,k;
    bool flag;
    char temp[5];
    while(scanf("%d%d",&n,&m),m||n)
    {
        memset(G,false,sizeof(G));
        memset(d,0,sizeof(d));
        flag=true;
        for(i=1;i<=m;++i)
        {
            scanf("%s",temp);
            if(!flag)         //已经排好序或者有环
                continue;
            int u=temp[0]-'A'+1;
            int v=temp[2]-'A'+1;
            if(!G[u][v])
            {
                ++d[v];
                G[u][v]=true;
            }
            ans=toposort();
            if(ans==1||ans==-1)
            {
                k=i;
                flag=false;
            }
        }
        if(ans==1)
        {
            printf("Sorted sequence determined after %d relations: %s.\n",k,s);
        }
        else if(ans==-1)
        {
            printf("Inconsistency found after %d relations.\n", k);
        }
       else if(flag)
            printf("Sorted sequence cannot be determined.\n");
    }
    return 0;
}

我的代码

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
int map[100][100];
int m,n;
int tindegree[100],indegree[100];
char str[5];
char s[39];
int toposort(){
     bool flag=true;
     memset(tindegree,0,sizeof(tindegree));
     memset(s,0,sizeof(s));
     for(int i=1;i<=n;i++){
     tindegree[i]=indegree[i];
     }
    for(int i=1;i<=n;i++){
        int sum=0,k;
           for(int j=1;j<=n;j++){
               if(!tindegree[j]){
                    k=j;
                    sum++;
               }
           }
           if(sum==0){
              return -1;
           }
           if(sum>1){
                flag=false;
           }
        s[i-1]=k+'A'-1;
        tindegree[k]--;
        for(int z=1;z<=n;z++){
            if(map[k][z]){
                 tindegree[z]--;
            }
        }

}
    s[n]='\0';
    if(flag==false)
    return 0;
    return 1;
}
int main(){
     while(scanf("%d%d",&n,&m)!=EOF){
        if(n==0&&m==0)
           break;
          memset(map,0,sizeof(map));
          memset(indegree,0,sizeof(indegree));
          memset(str,0,sizeof(str));
          memset(s,0,sizeof(s));
          int ans=2;
          int temp;
           bool flag=true;
          for(int i=1;i<=m;i++){
              scanf("%s",str);
              if(flag==false)
              continue;
              int u=str[0]-'A'+1;
              int v=str[2]-'A'+1;
              if(!map[u][v]){
                 map[u][v]=1;
                 indegree[v]++;
              }
             ans=toposort();
             if(ans==-1||ans==1){
                 temp=i;
                 flag=false;
             }
          }
          if(ans==1)
          printf("Sorted sequence determined after %d relations: %s.\n",temp,s);//temp不可以改为n
          else  if(ans==-1)
          printf("Inconsistency found after %d relations.\n",temp);
          else  if(flag)
          printf("Sorted sequence cannot be determined.\n");

}
    return 0;
}

poj1094的更多相关文章

  1. POJ1094[有向环 拓扑排序]

    Sorting It All Out Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 33184   Accepted: 11 ...

  2. nyoj349 poj1094 Sorting It All Out(拓扑排序)

    nyoj349   http://acm.nyist.net/JudgeOnline/problem.php?pid=349poj1094   http://poj.org/problem?id=10 ...

  3. POJ1094 拓扑排序

    问题:POJ1094   本题考查拓扑排序算法   拓扑排序:   1)找到入度为0的点,加入已排序列表末尾: 2)删除该点,更新入度数组.   循环1)2)直到 1. 所有点都被删除,则找到一个拓扑 ...

  4. [poj1094]Sorting It All Out_拓扑排序

    Sorting It All Out poj-1094 题目大意:给出一些字符串之间的大小关系,问能否得到一个唯一的字符串序列,满足权值随下标递增. 注释:最多26个字母,均为大写. 想法:显然,很容 ...

  5. POJ- 1094 Sorting It All Out---拓扑排序是否唯一的判断

    题目链接: https://vjudge.net/problem/POJ-1094 题目大意: 该题题意明确,就是给定一组字母的大小关系判断他们是否能组成唯一的拓扑序列.是典型的拓扑排序,但输出格式上 ...

  6. POJ1094——拓扑排序和它的唯一性

    比较模板的topological-sort题,关键在于每个元素都严格存在唯一的大小关系,而一般的拓扑排序只给出一个可能解,这就需要每趟排序的过程中监视它是不是总坚持一条唯一的路径. 算法导论里面的拓扑 ...

  7. poj1094 拓扑 Sorting It All Out

    Sorting It All Out Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 29744   Accepted: 10 ...

  8. poj1094 拓扑序

    题意:现在有多个大写字母(不一定连续),给出字母之间的大小关系,问到第几个关系时就能判断有唯一大小排序或出现矛盾,或是有多个合理排序,若有唯一排序,则输出它. 拓扑序,只不过坑爹的是如果关系处理到一半 ...

  9. poj1094 topsort

    Sorting It All Out Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 32275   Accepted: 11 ...

随机推荐

  1. HTML5——将图片拖拽上传

    如下图所示: 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  2. F12调试打开时,出现很多多余内容问题解决

    关闭vs2013的browserlink功能即可: <appSettings> <add key="vs:EnableBrowserLink" value=&qu ...

  3. 每天一个linux命令(16):whereis 命令

    whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b).man说明文件(参数-m)和源代码文件(参数-s).如果省略参数,则返回所有信息. 和 find相比,whereis查找的速度 ...

  4. 淘宝业务常用english

    ADX        ad exchange 广告交易平台 coupon     赠品 CPC         cost per click CPS         cost per sales CT ...

  5. shell 命令遇到的一些问题

    1.  command not found 一般都是未安装,需要root 权限去安装服务,就可正常使用.比如rz, sz, crontab, sendemail, lftp等 2. rz 传输失败,输 ...

  6. LinkedHashMap实现LRU算法

    LinkedHashMap特别有意思,它不仅仅是在HashMap上增加Entry的双向链接,它更能借助此特性实现保证Iterator迭代按照插入顺序(以insert模式创建LinkedHashMap) ...

  7. Prim和Kruskal求最小生成树

    Prim: 算法步骤: 1.任意结点开始(不妨设为v1)构造最小生成树: 2.首先把这个结点(出发点)包括进生成树里, 3.然后在那些其一个端点已在生成树里.另一端点还未在生成树里的所有边中找出权最小 ...

  8. BZOJ1113 海报PLA

    好像是很古老的题?现在BZOJ上找不到该题,所以没有提交. 1113: [Poi2008]海报PLA Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 8 ...

  9. schemaLocation value = 'xxxxxxxxxxxx' must have even number of URI's

    这是因为没有加上Spring的版本号,加上就行了,如: http://www.springframework.org/schema/beans/spring-beans.xsd -3.2.2 http ...

  10. 北航 编译实践 PL/0文法

    编译实践-PL\0编译系统实现 姓名:   专业: 计算机科学与技术 学院: 软件学院 提交时间: 2013年12月25日 北京航空航天大学·软件学院 编译实践-PL\0编译系统实现 实验要求 以个人 ...