zoukankan      html  css  js  c++  java
  • poj 1094 Sorting It All Out (拓补)

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

    代码:

    View Code
     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 int map[30][30];
     6 int de[30];
     7 int res[30];//存储结果
     8 int n,m;
     9 int topo()
    10 {
    11     int i,j;
    12     int d[30];
    13     int num,pos;
    14     int k=0,t=1;
    15     for(i=1;i<=n;i++)
    16     {
    17         d[i]=de[i];
    18     }
    19     for(i=1;i<=n;i++)
    20     {
    21         num=0;
    22         for(j=1;j<=n;j++)
    23         {
    24             if(d[j]==0)
    25             {
    26                 num++;//入度为0的点的个数
    27                 pos=j;//入度为0的点的位置
    28             }
    29         }
    30         if(num==0&&num!=n)
    31         return 0;//入度为0的点为0,存在环
    32         if(num>1)//是否存在唯一的入度为0点
    33         t=-1;
    34         res[k]=pos;
    35         k++;
    36         d[pos]=-1;
    37         for(j=1;j<=n;j++)//更新
    38         {
    39             if(map[pos][j]==1)
    40             d[j]--;
    41         }
    42     }
    43     return t;
    44 }
    45 int main()
    46 {
    47     int i,j;
    48     char str[10];
    49     while(scanf("%d%d",&n,&m)!=EOF)
    50     {
    51         if(m==0&&n==0)
    52         break;
    53         getchar();
    54         memset(de,0,sizeof(de));
    55         memset(map,0,sizeof(map));
    56         int flag=0;
    57         int t;
    58         for(i=1;i<=m;i++)
    59         {
    60             gets(str);
    61             map[str[0]-'A'+1][str[2]-'A'+1]=1;
    62             de[str[2]-'A'+1]++;
    63             if(flag==0)//关系是否已判断出
    64             t=topo();//每输入一个关系进行一次拓补
    65             if(flag==0&&t==0)//存在环,输出矛盾
    66             {
    67                 printf("Inconsistency found after %d relations.\n",i);
    68                 flag=1;
    69             }
    70             if(flag==0&&t==1)//最终有n个顶点且无环
    71             {
    72                 printf("Sorted sequence determined after %d relations: ",i);
    73                 for(j=0;j<n;j++)
    74                     printf("%c",res[j]+'A'-1);
    75                 printf(".\n");
    76                 flag=1;
    77             }
    78         }
    79         if(flag==0)
    80             printf("Sorted sequence cannot be determined.\n");
    81 
    82     }
    83     return 0;
    84 }
  • 相关阅读:
    Educational Codeforces Round 69 D E
    洛谷P2325 [SCOI2005]王室联邦
    洛谷P1494 [国家集训队]小Z的袜子
    洛谷P4514 上帝造题的七分钟
    POJ3321Apple Tree
    满血复活前的记录(持续更新ing)
    各位2019见
    LuoguP3338 [ZJOI2014]力
    Codeforces Round #478 Div2 975A 975B 975C 975D
    Codeforces Round #479 (Div. 3) 题解 977A 977B 977C 977D 977E 977F
  • 原文地址:https://www.cnblogs.com/wanglin2011/p/2813954.html
Copyright © 2011-2022 走看看