Sorting It All Out

Sorting It All Out

Description

An ascending sorted sequence of distinct values is one in which some form of a less-than operator is used to order the elements from smallest to largest. For example, the sorted sequence A, B, C, D implies that A < B, B < C and C < D. in this problem, we will give you a set of relations of the form A < B and ask you to determine whether a sorted order has been specified or not.

Input

Input consists of multiple problem instances. Each instance starts with a line containing two positive integers n and m. the first value indicated the number of objects to sort, where 2 <= n <= 26. The objects to be sorted will be the first n characters of the uppercase alphabet. The second value m indicates the number of relations of the form A < B which will be given in this problem instance. Next will be m lines, each containing one such relation consisting of three characters: an uppercase letter, the character “<” and a second uppercase letter. No letter will be outside the range of

the first n letters of the alphabet. Values of n = m = 0 indicate end of input.

Output

For each problem instance, output consists of one line. This line should be one of the following three:

Sorted sequence determined after xxx relations: yyy…y. Sorted sequence cannot be determined. Inconsistency found after xxx relations.

where xxx is the number of relations processed at the time either a sorted sequence is determined or an inconsistency is found, whichever comes first, and yyy…y is the sorted, ascending sequence.

Sample Input

4 6
A<B
A<C
B<C
C<D
B<D
A<B
3 2
A<B
B<A
26 1
A<Z
0 0

Sample Output

Sorted sequence determined after 4 relations: ABCD.
Inconsistency found after 2 relations.
Sorted sequence cannot be determined.



 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<map>
 6 #include<set>
 7 #include<stack>
 8 #include<queue>
 9 #include<vector>
10 using namespace std;
11 const int ms=26;
12 int n,m;
13 bool appear[ms];
14 char output[ms+1];
15 int cnt[ms];
16 int tmp[ms];
17 vector<vector<char> > v;
18 int topo_sort(int s)
19 {
20     int i,j,k,flag=1;
21     int total=0,r=0;
22     for(i=0;i<n;i++)
23         tmp[i]=cnt[i];
24     while(s--)
25     {
26         total=0;
27         for(i=0;i<n;i++)
28             if(appear[i]&&tmp[i]==0)
29             {
30                 j=i;
31                 total++;
32             }
33         if(total>=1)
34         {
35             if(total>1)
36                 flag=0;
37             for(i=0;i<v[j].size();i++)
38                 tmp[v[j][i]]--;
39             tmp[j]=-1;
40             output[r++]=j+'A';
41             output[r]=0;
42         }
43         else
44             return -1;
45     }
46     if(flag)
47         return r;
48     return 0;
49 }
50 int main()
51 {
52     int i,j,k,judge,det;
53     char str[4];
54     while(scanf("%d%d",&n,&m)==2&&(n+m))
55     {
56         judge=0;
57         det=0;
58         int sum=0;
59         v.clear();v.resize(n);
60         memset(cnt,0,sizeof(cnt));
61         memset(appear,false,sizeof(appear));
62         for(i=1;i<=m;i++)
63         {
64             scanf("%s",str);
65             cnt[str[2]-'A']++;
66             v[str[0]-'A'].push_back(str[2]-'A');
67             if(!appear[str[0]-'A'])
68             {
69                 sum++;
70                 appear[str[0]-'A']=1;
71             }
72             if(!appear[str[2]-'A'])
73             {
74                 sum++;
75                 appear[str[2]-'A']=1;
76             }
77             if(judge==0)
78             {
79                 det=topo_sort(sum);
80                 if(det==-1)
81                 {
82                     judge=-1;k=i;
83                 }
84                 else if(det==n)
85                 {
86                     judge=1;
87                     k=i;
88                 }
89             }
90         }
91         if(judge==-1)
92             printf("Inconsistency found after %d relations.\n",k);
93         else if(judge==0)
94             printf("Sorted sequence cannot be determined.\n");
95         else
96             printf("Sorted sequence determined after %d relations: %s.\n",k,output);
97     }
98     return 0;
99 }

 

转载于:https://www.cnblogs.com/767355675hutaishi/p/4078447.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109669.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 加入购物车怎么操作_买家加入购物车不买怎么办

    加入购物车怎么操作_买家加入购物车不买怎么办ShoppingCart.javapackagecom.aff.bookstore.domain;importjava.util.Collection;importjava.util.Ha

    2022年8月1日
    9
  • Pycharm如何提交代码至github仓库配置操作步骤[通俗易懂]

    Pycharm如何提交代码至github仓库配置操作步骤[通俗易懂]需求:同Eclipse解决提交代码至github仓库初衷一致详细操作步骤如下:github创建准备提交的git地址:https://github.com/xxxxxxx/test.git打开pycharm,File–>settings–VersionControl–Github配置账户密码,根据习惯选择认证方式:创建demo项目,pycharm工具条选择VCS,右键选择共享项目…

    2022年8月29日
    4
  • 万字图解Java多线程

    万字图解Java多线程前言java多线程我个人觉得是javaSe中最难的一部分,我以前也是感觉学会了,但是真正有多线程的需求却不知道怎么下手,实际上还是对多线程这块知识了解不深刻,不知道多线程api的应用场景,不知道多线程的运行流程等等,本篇文章将使用实例+图解+源码的方式来解析java多线程。文章篇幅较长,大家也可以有选择的看具体章节,建议多线程的代码全部手敲,永远不要相信你看到的结论,自己编码后运行出来的,才是自己的。什么是java多线程?进程与线程进程当一个程序被运行,就开启了一个进程,比如启动了qq,w.

    2022年6月6日
    32
  • 【OC加强】辛格尔顿和[NSFileManager defaultMagager]以及其他设计模式

    【OC加强】辛格尔顿和[NSFileManager defaultMagager]以及其他设计模式

    2022年1月4日
    39
  • N70/N72常见问题汇总

    N70/N72常见问题汇总引自:http://bbs.imobile.com.cn/viewthread.php?tid=1092547这里是一些常见的问题,求助前请看里面有没有你需要的答案,或者善用论坛的搜索功能已更新至第四楼为什么我看不到手机或内存卡上的system文件夹?在手机上看这个文件夹需要安装第三方文件管理软件fileman、SeleQ、Fexplorer等文件管理软件如果要在电脑上看到这个文件夹需要将卡…

    2022年7月11日
    16
  • vue插槽slot-scope_slot插槽的使用方法

    vue插槽slot-scope_slot插槽的使用方法vue中的插槽————slot什么是插槽?插槽(Slot)是Vue提出来的一个概念,正如名字一样,插槽用于决定将所携带的内容,插入到指定的某个位置,从而使模板分块,具有模块化的特质和更大的重用性。

    2022年8月4日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号