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. 数据结构和算法 – 10.集合

    集合: 联合.交叉.差异.子集 using System; using System.Collections; using System.Collections.Generic; using Syst ...

  2. 微软MSMQ消息队列的使用

    首先在windows系统中安装MSMQ 一.MSMQ交互 开发基于消息的应用程序从队列开始.MSMQ包含四种队列类型: 外发队列:消息发送到目的地之前,用它来临时存储消息. 公共队列:在主动目录中公布 ...

  3. 在ubuntu上搭建开发环境1---在windows7的基础上在安装ubuntu(双系统)

    转载:http://jingyan.baidu.com/article/60ccbceb18624464cab197ea.html 当需要频繁使用ubuntu时,vmware虚拟机下运行ubuntu, ...

  4. T-SQL 常用语句

    1. 查看 Table 或者 Column 被那些object(存储过程.函数或View)调用. select a.* from sysobjects a, syscomments b where a ...

  5. <转>ORA-12154: TNS: 无法解析指定的连接标识符

    相信作为ORACLE数据库的开发人员没有少碰到“ORA-12154: TNS: 无法解析指定的连接标识符”,今天我也又碰到了类似的情况,将我的解决方法进行小结,希望能对碰到同样问题的友人们提供帮助. ...

  6. C# 重绘tabControl,添加关闭按钮(页签)

    C# 重绘tabControl,添加关闭按钮(页签) 调用方法 参数: /// <summary> /// 初始化 /// </summary> /// <param n ...

  7. Matlab中如何将(自定义)函数作为参数传递给另一个函数

    假如我们编写了一个积分通用程序,想使它更具有通用性,那么可以把被积函数也作为一个参数.在c/c++中,可以使用函数指针来实现上边的功能,在matlab中如何实现呢?使用函数句柄--这时类似于函数指针的 ...

  8. JavaScript中new和this

    [TOC] new var obj = new Base(); 相当于: var obj = {}; //创建空对象obj obj.__proto__ = Base.prototype; //将空对象 ...

  9. Codeforces Round #212 (Div. 2) D. Fools and Foolproof Roads 并查集+优先队列

    D. Fools and Foolproof Roads   You must have heard all about the Foolland on your Geography lessons. ...

  10. HDU 5791 Two DP

    Two   Problem Description   Alice gets two sequences A and B. A easy problem comes. How many pair of ...