poj 1094 Sorting It All Out

Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%lld & %llu

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.
/*/
给出字母个数和提示次数,排出ABCD......的大小 按照格式[c1]<[c2]输入,请判断是否能够按照输入严格排序,如果可以就输出在第多少次输入后就已经成功排序,并且输出排序的队列 ;
【Sorted sequence determined after xxx relations: yyy...y.】 如果输完后不能够按照大小严格排序,就输出不可以成功排序【Sorted sequence cannot be determined. 】 如果在输入后出现了A>B,B<A的矛盾输出矛盾出现的次数【Inconsistency found after xxx relations. 】 要注意中途记录输入的次数,或者按照输入一次判断一次,随时对输入进行终止,但是要注意后面继续输入的吸收。 思路,用拓扑排序进行解题,每组进行输入如果排序过程中严格递增即入度为0的点只有一个,就正常排序。 如果出现入度为0的点有多个则就是说明有的点没有严格排序,要再次进行排序,直到输入结束后还是有多个入度==0的点,就说明不能够成功排序。 如果出现某次找不到入度为0的点,说明已经成环即出现矛盾。可以结束这次排序了。 AC代码:
/*/
#include"algorithm"
#include"iostream"
#include"cstring"
#include"cstdlib"
#include"string"
#include"cstdio"
#include"vector"
#include"cmath"
#include"queue"
using namespace std;
#define memset(x,y) memset(x,y,sizeof(x))
#define memcpy(x,y) memcpy(x,y,sizeof(x))
#define MX 30
int cnt;
int map[MX][MX]; //邻接矩阵
int indegree[MX]; //入度
int flag; queue<int >q; int toposort(int map[MX][MX],int n) {
int mp[MX][MX];
memcpy(mp,map);
memset(indegree,0);
for(int j=0; j<n; j++) {
for(int k=0; k<n; k++) {
if(mp[j][k]==1) {
indegree[k]++;
}
}
}
flag=-1;
queue<int> qq;
for (int i=0; i<n;) {
int count=0;
for (int j=0; j<n; j++) {
if (indegree[j]==0) count++;//记录入度为0的点的数量
}
if(!count)return 2;//有环。
if(count>1) flag=1;//如果入度为0的点大于一个无法判断他的唯一排序性
for(int j=0; j<n; j++) {
if(!indegree[j]) {
++i;
qq.push(j);
for (int k=0; k<n; k++) {
if (mp[j][k]) {
indegree[k]--; //减少入度
mp[j][k]=0; //删边
}
}
indegree[j]=-1;
break;//一次循环消除一个点
}
}
}
if(flag!=1) { //判断是否需要维护队列 是否进行了消边操作 如果flag!=1则说明无法再进行消边操作,即已经全部排序好了。
q=qq;
return 0; //
} else return 1;//还未结束
} int main() {
char s[10];
memset(s,0) ;
int n,m,st,ed;
// freopen("in.txt", "r", stdin);
while(~scanf("%d %d",&n,&m)) {
if(!m&&!n)break;
cnt=0;
flag=-1;
memset(map,0);
for(int i=1; i<=m; i++) {
scanf("%s",s);
st=(int)s[0]-'A';
ed=(int)s[2]-'A';
map[st][ed]=1;
if (flag==0||flag==2) continue;//如果已经成环或者已经无法再操作了就跳过操作 吸收后面的输入
else flag=toposort(map,n);
if(flag==0) {
printf("Sorted sequence determined after %d relations: ",i);
while (!q.empty()) {
int ch=q.front();
q.pop();
printf("%c",ch+'A');
}
puts(".");
} else if (flag==2) {
printf("Inconsistency found after %d relations.\n",i);
}
} if (flag==1)puts("Sorted sequence cannot be determined.");
}
return 0;
}

  

ACM: poj 1094 Sorting It All Out - 拓扑排序的更多相关文章

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

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

  2. [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 ...

  3. 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 ...

  4. poj 1094 Sorting It All Out_拓扑排序

    题意:是否唯一确定顺序,根据情况输出 #include <iostream> #include<cstdio> #include<cstring> #include ...

  5. POJ 1094 Sorting It All Out 拓扑排序 难度:0

    http://poj.org/problem?id=1094 #include <cstdio> #include <cstring> #include <vector& ...

  6. [ACM] POJ 1094 Sorting It All Out (拓扑排序)

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

  7. PKU 1094 Sorting It All Out(拓扑排序)

    题目大意:就是给定一组字母的大小关系判断他们是否能组成唯一的拓扑序列. 是典型的拓扑排序,但输出格式上确有三种形式: 1.该字母序列有序,并依次输出: 2.判断该序列是否唯一: 3.该序列字母次序之间 ...

  8. POJ 1094 Sorting It All Out(拓扑排序+判环+拓扑路径唯一性确定)

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

  9. nyoj 349&Poj 1094 Sorting It All Out——————【拓扑应用】

    Sorting It All Out 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 An ascending sorted sequence of distinct ...

随机推荐

  1. shell学习三十四天----printf详解

    http://blog.csdn.net/shanyongxu/article/details/46744055

  2. C# 设计模式 提高可维护性的几点原则

    为了提高软件的可维护性,应该遵循以下几点原则: 1.“开放--封闭”原则(OCP) 一个软件实体应该对扩展开放,对修改封闭. 2.里氏代换原则(LSP) 子类型必须能替换她们的基类型,反过来则不成立. ...

  3. Eclipse 快捷键 转换为Netbeans 快捷键

    一直使用netbeans IDE开发,习惯了netbeans的快捷键,最近要开发个app就选择了H5. 接着使用了HBuilder (基于Eclipse开发) 总体来讲这个IDE还可以,不管是代码提示 ...

  4. 用with实现python的threading,新鲜啊

    哈哈,2.5以后可用.自动加锁释放,如同操作文件打开关闭一样. #!/usr/bin/env python # -*- coding: utf-8 -*- import threading impor ...

  5. Go的基本示例

    有空可以看看, 不知能不能超越JAVA的作法. hello.go package main import "fmt" func main() { s := "hello& ...

  6. PostgreSQL的时间/日期函数使用

    PostgreSQL的常用时间函数使用整理如下: 一.获取系统时间函数 1.1 获取当前完整时间 select now(); david=# select now(); now ----------- ...

  7. [Linux] 学习笔记之安装学习环境(sshd, lrzsz)

    紧接前一篇,在VMWare安装完Linux,这个时候我们要使用远程工具连接到虚拟机上去了,以前一直使用Putty,后来到新公司之后,推荐使用SecureCRT,使用之后,觉得效果不错,但是每次连接都失 ...

  8. jquery audio player

    <!DOCTYPE html><html lang="en"> <head>  <meta charset="utf-8&quo ...

  9. linux 用户之间的切换

    从root用户切换到普通用户fxm, 使用如下命令:su - fxm 从普通用户切换到root用户,使用如下命令:su - 或者 su, root可以省略不写.

  10. UED

    User Experience Design(用户体验设计),简称UED.UED是进行产品策划的主力之一,他们用自己的知识.经验.设计能力拿出设计方案. UED不只是互联网专家,还是行业专家.能够用自 ...