图论——确定排序序列

问题 E: 确定排序序列

时间限制: 1 Sec  内存限制: 32 MB
提交: 17  解决: 12
[提交][状态][讨论版][命题人:外部导入]

题目描述

一个由不同的值组成的按升序排序的序列,通常使用小于操作符,把元素从小到大排列。
例如,有序序列A,B,C,D表示A 现给你一组形如A

输入

输入包含多组测试数据。每组输入的第一行是两个正整数n和m。
n表示排序对象的个数,2<=n<=26。排序对象是字母表开始的n个大写字符。
m表示形如A 接下来m行,每行输入一个关系,由三个字符构成:第一个大写字母,符号“<”,第二个大写字母。字母不会超过字母表开始的n个字母的范围。
当n=m=0时,输入结束。

输出

对于每组输入,输出一行。该行将是以下三者之一:
Sorted sequence determined after xxx relations: yyy...y.(在xxx个关系后,确定了排序序列:yyy...y)
Sorted sequence cannot be determined.(不能确定排序序列)
Inconsistency found after xxx relations.(在xxx个关系后,发现关系矛盾)

解释说明:
xxx是处理关系时,确定排序序列已经形成或发现关系矛盾时的关系数目,哪种情况先出现,就输出哪种。yyy...y是排序的升序序列。

样例输入

4 6
A 
  

样例输出

Sorted sequence determined after 4 relations: ABCD.
Inconsistency found after 2 relations.
Sorted sequence cannot be determined.
#include
#include
#include
#include
#include
#include
#include
#define inf 0x3f3f3f3f
using namespace std;
int n,m,flag;
int map[26][26],in[26],ans[26];
char a,b,k;
int judge()
{
    int in1[26];
    for(int i=0;i>n>>m)
   {
    if(n==0&&m==0)break;
    memset(map,0,sizeof(map));
    memset(in,0,sizeof(in));
    flag=0;
        for(int i=0;i>a>>k>>b;
            if(flag)continue;
            map[a-'A'][b-'A']=1;
            in[b-'A']++;
            int temp=judge();
            if(temp==1)
            {
                cout<<"Sorted sequence determined after "<

 

你可能感兴趣的:(图论)