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

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

    题意:给定一个关系,判断三种情况

         1、到第几组的时候就可以判断出 什么关系了

         2、到第几组的时候可以判断矛盾

         3、判断不出来

                   每次输入,都要 拓扑 判断

     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cstdlib>
     5 #include<stack>
     6 #include<queue>
     7 #include<cmath>
     8 #include<algorithm>
     9 using namespace std;
    10 
    11 int flag,dis[30],cnt;
    12 int n,G[100][100],r[30];
    13 char f[300];
    14 void find()
    15 {
    16     int i,j,k,count,x;
    17     flag=1;  //一直为1 的话说明 判断出关系了
    18     cnt=0;
    21     memcpy(dis,r,n*sizeof(int));
    22     for(i=0; i<n; i++)
    23     {
    24         count=0;
    25         for(j=0; j<n; j++)
    26         {
    27             if(dis[j]==0)
    28             {
    29                 x=j;
    30                 count++;
    31             }
    32         }
    33         if(count==0)  // 入度都为0,说明有回环
    34         {
    35             flag = 0;
    36             return;
    37         }
    38         if(count>1)  //说明现在还没判断出关系来
    39         flag = -1;
    40         dis[x] = -1;
    41         f[cnt++]=x+65;
    42         for(j=0; j<n; j++)
    43         {
    44             if(G[x][j])
    45             dis[j]--;
    46         }
    47     }
    48 }
    49 int main()
    50 {
    51     int m,i,j,k;
    52     int x;
    53     char a,b,c;
    54     while(cin>>n>>m&&(m!=0||n!=0))
    55     {
    56         getchar();
    57         flag = 0; cnt=0;
    58         memset(r,0,sizeof(r));
    59         memset(G,0,sizeof(G));
    60         for(k=1; k<=m; k++)
    61         {
    62             x=0;
    63             scanf("%c%c%c",&a,&b,&c);
    64             getchar();
    65             if(flag)
    66             continue;
    67                 if(G[a-65][c-65]==0)
    68                 {
    69                     G[a-65][c-65]=1;
    70                     r[c-65]++;
    71                 }
    72             find();
    73             switch(flag)
    74             {
    75                 case -1:flag=0; break;
    76                 case 0: flag=1;     printf("Inconsistency found after %d relations.
    ",k); break;
    77                 case 1: f[cnt]=''; printf("Sorted sequence determined after %d relations: %s.
    ",k,f); break;
    78             }
    79         }
    80         if(!flag)
    81         printf("Sorted sequence cannot be determined.
    ");
    82     }
    83     return 0;
    84 }
  • 相关阅读:
    事件优先权hdu1873(看病要排队)
    项目包ExpressJS入门指南
    按钮页面ActivityGroup实现Tab效果
    分割范围Codeforces Round #181 (Div. 2)
    随机伪随机随机数字
    数组最小剑指Offer读书笔记之第五章优化时间空间效率
    列字段通用excel导入修改版
    图片区域帧差法识别物体_matlab
    宋体关闭完美退出应用程序
    生成树最小生成树poj 1258 prim
  • 原文地址:https://www.cnblogs.com/bfshm/p/3254664.html
Copyright © 2011-2022 走看看