• poj 1094(拓扑排序)


    http://poj.org/problem?id=1094

    题意:给你m个字母,有n个判断语句。求在哪个语句就可以判断出这个是不是一个环,或者在哪个语句可以判断出这些字母的排序规则,或者就是不能确定。

    思路:每输入一次,进行一次排序,看会不会构成环或者已经可以确定了判断规则。

     1 #include <stdio.h>
     2 #include <string.h>
     3 
     4 char ans[30];
     5 
     6 int indegree[27];
     7 
     8 bool mp[26][26];
     9 
    10 int topsort(int n)
    11 {
    12     int i,j,m,flag,c=0,tmp[27],l=1;
    13     for(i=0;i<n;i++)
    14         tmp[i]=indegree[i];
    15     for(i=0;i<n;i++)
    16     {
    17         m=0;
    18         for(j=0;j<n;j++)
    19             if(tmp[j]==0) {m++;flag=j;}
    20         if(m==0) return 0;    //如果全部的度都是0的话,那么说明有环。
    21         ans[c++]=flag+'A';
    22         if(m>1) l=-1;      //这个不能用return -1,因为成环不一定是要成一个大环,可以几个字母成一个小环。
    23         tmp[flag]--;
    24         for(j=0;j<n;j++)
    25             if(mp[flag][j]) tmp[j]--;
    26     }
    27     return l;
    28 }
    29 
    30 int main()
    31 {
    32     freopen("in.txt","r",stdin);
    33     int m,n,sign;
    34     char inp[4];
    35     while(scanf("%d%d",&m,&n),m||n)
    36     {
    37         memset(mp,false,sizeof(mp));
    38         memset(indegree,0,sizeof(indegree));
    39         sign=0;
    40         for(int i=1;i<=n;i++)
    41         {
    42             scanf("%s",inp);
    43             if(sign) continue;
    44             mp[inp[0]-'A'][inp[2]-'A']=true;
    45             indegree[inp[2]-'A']++;
    46             int s=topsort(m);
    47             if(s==0)
    48             {
    49                 printf("Inconsistency found after %d relations.
    ",i);
    50                 sign=1;
    51             }
    52             else if(s==1)
    53             {
    54                 printf("Sorted sequence determined after %d relations: ",i);
    55                 for(int j=0;j<m;j++)
    56                     printf("%c",ans[j]);
    57                 printf(".
    ");
    58                 sign=1;
    59             }
    60         }
    61         if(!sign)
    62             printf("Sorted sequence cannot be determined.
    ");
    63     }
    64     return 0;
    65 }
  • 相关阅读:
    jQuery技巧大放送
    网页挂马工作原理完全分析
    C#常见问题
    网站优化之页面优化
    SQL大全分享
    获得本机的可用的所有打印机
    C#文件操作方法大全
    编程范式及其代表语言
    23种模式简說
    C# Open Source
  • 原文地址:https://www.cnblogs.com/Tree-dream/p/5726348.html
Copyright © 2020-2023  润新知