zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    springboot 时间戳和 数据库时间相差14个小时
    财富的起源读书笔记1
    高性能mysql读书笔记1
    springboot项目使用 apollo 配置中心
    MongoDB图形化管理工具
    oracle体系结构详解
    三、oracle 体系结构
    用DOS批处理实现FTP自动上传、下载、清理文件
    ORA-01033:ORACLE initialization or shutdown in progress
    从WEB SERVICE 上返回大数据量的DATASET
  • 原文地址:https://www.cnblogs.com/Tree-dream/p/5726348.html
Copyright © 2011-2022 走看看