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

Sorting It All Out
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 35468   Accepted: 12458

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.由于要输出当关系确定时是第几步,所以每一步都需要进行拓扑排序。(假如读完所有数据再进行拓扑排序,则无法确定关系确定时是第几步)。

2.在进行拓扑排序时(flag为状态类型,1表示冲突; 2表示不能确定; 3表示关系确定。 flag初始化为3):

(1) 如果入度为0的点的个数为0,则成环,可直接得出结果:冲突。直接return 1。

(2) 如果入度为0的点的个数为1,继续。

(3) 如果入度为0的点的个数大于1,则表明最小的那个不能确定。这时把flag改为2,然后继续。(为什么还要继续,不是可以直接return 2,表明关系还不能确定了吗? 虽然如此,但是继续拓扑排序下去,可能会发现环,即冲突。)

代码如下:

#include<stdio.h>//poj 1094
#include<string.h>
#include<stdlib.h> int deg[27], sub_deg[27],edge[27][27],n,m;
char a,b,c,ans[27]; int TopoSort()
{
int flag = 3;
memcpy(sub_deg,deg,sizeof(deg));
for(int i = 0; i<n; i++)
{
int k, cnt = 0;
for(int j = 0; j<n; j++)
if(sub_deg[j]==0) cnt++, k = j; if(cnt==0) return 1; //成环
if(cnt>1) flag = 2; //最小的不能确定。但不能直接退出,因为接下来可能会出现环。 sub_deg[k] = -1;
ans[i] = k+65;
for(int j = 0; j<n; j++)
if(edge[k][j]) sub_deg[j]--;
}
return flag;
} int main()
{
int flag,step;
while(scanf("%d%d",&n,&m) && (n||m))
{
int finished = 0, flag, step;
memset(deg,0,sizeof(deg));
memset(edge,0,sizeof(edge));
for(int i = 1; i<=m; i++)
{
getchar();
scanf("%c%c%c",&a,&c,&b);
if(finished) continue;
deg[b-65]++;
edge[a-65][b-65] = 1; ans[n] = 0;
flag = TopoSort();
if(flag==1 || flag==3) { step = i; finished = 1; }
} if(flag==1)
printf("Inconsistency found after %d relations.\n",step);
else if(flag==2)
printf("Sorted sequence cannot be determined.\n");
else
printf("Sorted sequence determined after %d relations: %s.\n",step,ans);
}
return 0;
}

POJ1094 Sorting It All Out —— 拓扑排序的更多相关文章

  1. [poj1094]Sorting It All Out_拓扑排序

    Sorting It All Out poj-1094 题目大意:给出一些字符串之间的大小关系,问能否得到一个唯一的字符串序列,满足权值随下标递增. 注释:最多26个字母,均为大写. 想法:显然,很容 ...

  2. nyoj349 poj1094 Sorting It All Out(拓扑排序)

    nyoj349   http://acm.nyist.net/JudgeOnline/problem.php?pid=349poj1094   http://poj.org/problem?id=10 ...

  3. ACM: poj 1094 Sorting It All Out - 拓扑排序

    poj 1094 Sorting It All Out Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%lld & ...

  4. poj 1094 Sorting It All Out (拓扑排序)

    http://poj.org/problem?id=1094 Sorting It All Out Time Limit: 1000MS   Memory Limit: 10000K Total Su ...

  5. POJ- 1094 Sorting It All Out---拓扑排序是否唯一的判断

    题目链接: https://vjudge.net/problem/POJ-1094 题目大意: 该题题意明确,就是给定一组字母的大小关系判断他们是否能组成唯一的拓扑序列.是典型的拓扑排序,但输出格式上 ...

  6. POJ1094 Sorting It All Out LUOGU 排序

        Sorting It All Out Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 40012   Accepted ...

  7. POJ 1094:Sorting It All Out拓扑排序之我在这里挖了一个大大的坑

    Sorting It All Out Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 29984   Accepted: 10 ...

  8. [ACM_模拟] POJ 1094 Sorting It All Out (拓扑排序+Floyd算法 判断关系是否矛盾或统一)

    Description An ascending sorted sequence of distinct values is one in which some form of a less-than ...

  9. POJ 1094 Sorting It All Out (拓扑排序) - from lanshui_Yang

    Description An ascending sorted sequence of distinct values is one in which some form of a less-than ...

随机推荐

  1. mark一下。hadoop分布式系统搭建

    用于测试,我用4台虚拟机搭建成了hadoop结构 我用了两个台式机.一个xp系统,一个win7系统.每台电脑装两个虚拟机,要不然内存就满了. 1.安装虚拟机环境 Vmware,收费产品,占内存较大. ...

  2. POJ2560 Freckles

    Time Limit: 1000MS   Memory Limit: 65536KB   64bit IO Format: %lld & %llu Description In an epis ...

  3. 【HDOJ6222】Heron and His Triangle(Java,二分,递推)

    题意:让你找这样的一个三角形,三条边为t,t-1,t+1,并且面积为整数,最后满足t大于等于n. n<=1e30 思路:直接推式子不会,打表找规律 f(n)=4*f(n-1)-f(n-2)(n& ...

  4. AtCoder Regular Contest 074F - Lotus Leaves

    $n \leq 300,m \leq 300$,$n*m$的格子里有起点有终点有空地有障碍,人会从起点选一个同行或同列空地跳过去,然后一直这样跳到终点.求至少删掉多少格子使得人跳不到终点. 首先S和T ...

  5. poj 3461 Oulipo,裸kmp

    传送门 Oulipo Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 32373   Accepted: 13093 Desc ...

  6. 标准C程序设计七---15

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...

  7. Linux下学习王爽老师的汇编语言

    坐起来非常容易,找到这条路确实非常曲折,为了后来的同志们不再纠结,特记录如下: 这几天看汇编语言时,很多人都推荐王爽老师的<汇编语言>,老师的书的确写的很好,但是讲的是ms的汇编,但是总不 ...

  8. Struts2 文件上传和下载

    首先我们写一个单文件长传的fileupload.jsp: <body> <s:fielderror></s:fielderror> <!-- 报错信息 --& ...

  9. SELinux 服务检查与关闭

    查看SELinux状态: 1./usr/sbin/sestatus -v      ##如果SELinux status参数为enabled即为开启状态 SELinux status:         ...

  10. 记一次ORM的权衡和取舍

    面对ORM的选型,有些人是根据自己熟悉程度来评判,有些人是根据他人的推荐来抉择,有些人觉得都差不多,随便了.当自己要真正做选择的时候,以上的这些依据都无法真正说服自己,因为不同的业务需求,不同的团队构 ...