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. 数据结构和算法 – 11.高级排序算法(下)

    三.选择类排序 3.1.简单选择排序 http://www.cnblogs.com/tangge/p/5338734.html#XuanZe 3.2 堆排序 要知道堆排序,首先要了解一下二叉树的模型. ...

  2. Linux系统监控命令及如何定位到Java线程

    >>PID.TID的区分 uid是user id,即用户id,root用户的uid是0,0为最高权限,gid是group id,用户组id,使用 id 命令可以很简单的通过用户名查看UID ...

  3. 聊聊SOA面向服务架构

    什么是SOA SOA(Service-Oriented Architecture),即面向服务的架构.SOA是一种粗粒度.松耦合服务架构,服务之间通过简单.精确定义接口进行通讯,不涉及底层编程接口和通 ...

  4. 基于VLC的播放器开发

    VLC的C++封装 因为工作需要,研究了一段时间的播放器开发,如果从头开始做,可以学习下FFmpeg(http://www.ffmpeg.org/),很多播放器都是基于FFmpeg开发的,但是这样工作 ...

  5. WebStorm 有哪些过人之处?

    作者:方应杭链接:https://www.zhihu.com/question/20936155/answer/16654794来源:知乎著作权归作者所有,转载请联系作者获得授权. 先说缺点吧: 常驻 ...

  6. JavaScript - Html 中使用JavaScript

    把JavaScript插入到HTML页面要使用<script>元素.使用这个元素可以把JavaScript嵌入到HTML页面中,让脚本与标记混合在一起:也可以包含外部的JavaScript ...

  7. hdu 5294 最短路+最大流 ***

    处理处最短路径图,这个比较巧妙 链接:点我

  8. JAVA的容器---List,Map,Set (转)

    JAVA的容器---List,Map,Set Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashM ...

  9. hihocoder #1333 : 平衡树·Splay2

    描述 小Ho:好麻烦啊~~~~~ 小Hi:小Ho你在干嘛呢? 小Ho:我在干活啊!前几天老师让我帮忙管理一下团队的人员,但是感觉好难啊. 小Hi:说来听听? 小Ho:事情是这样的.我们有一个运动同好会 ...

  10. I Hate It(线段树基础)

    Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...