POJ 1094 Sorting It All Out(欧拉排序)
来源:互联网 发布:java erp系统源码下载 编辑:程序博客网 时间:2024/06/16 22:40
Sorting It All Out
Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 27374 Accepted: 9483
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.
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 6A<BA<CB<CC<DB<DA<B3 2A<BB<A26 1A<Z0 0
Sample Output
Sorted sequence determined after 4 relations: ABCD.Inconsistency found after 2 relations.Sorted sequence cannot be determined.赤裸裸的欧拉排序问题,不过有个小陷阱就是说判断出是连通图而且有欧拉序还不行,还必须当前输出的值有一条有向边指向上一个输出的值,这样才能确定所有字母的大小问题,比较水,不多说了,直接上代码
#include<iostream>#include<cstdio>#include<cmath>#include<cstdlib>#include<cstring>using namespace std;int first[27], next[900][2], letters[27], vis[27];int n, m, k;bool dfs(int i){ vis[i] = -1; bool judge = false; for(int u = first[i]; u != -1; u = next[u][0]) { if(vis[next[u][1]] == 0) judge = dfs(next[u][1]); if(judge || vis[next[u][1]] == -1) return true; } vis[i] = 1; return false;}//找错误bool findw(){ memset(vis, 0, sizeof(vis)); bool judge = false; for(int i = 0; i < n; i++) { if(!vis[i]) judge = dfs(i); if(judge) return true; } return false;}bool dfs2(int i){ bool judge = true; for(int u = first[i]; u != -1 && judge; u = next[u][0]) if(vis[next[u][1]] == 0) judge = dfs2(next[u][1]); if(!judge) return false; for(int u = first[i]; u != -1 && judge; u = next[u][0]) if(next[u][1] == letters[k+1]) judge = false; if(judge && k != n-1) return false; vis[i] = 1; letters[k--] = i; return true;}//找排序bool finds(){ memset(letters, -1, sizeof(letters)); memset(vis, 0, sizeof(vis)); k = n-1; bool judge = true; for(int i = 0; i < n && judge; i++) { if(!vis[i] && first[i] != -1) judge = dfs2(i); } if(!judge) return false; for(int i = 0; i < n; i++) if(letters[i] == -1) return false;// cout << "bool finds() return true" << endl; return true;}int main(){// freopen("1094.in", "r", stdin); char str[5]; while(scanf("%d%d", &n, &m) && n) { memset(first, -1, sizeof(first)); bool inc, det; inc = det = false; int x = 0; for(int i = 1; i <= m; i++) { scanf("%s", str); if(inc || det) continue;// cout << "--------------" << endl; next[i][0] = first[str[0] - 'A']; next[i][1] = str[2] - 'A'; first[str[0] - 'A'] = i; if(inc = findw())//找错误 x = i; else if(det = finds())//找排序 x = i; } if(inc) printf("Inconsistency found after %d relations.\n", x); else if(det) { printf("Sorted sequence determined after %d relations: ", x); for(int i = 0; i < n; i++) printf("%c", letters[i] + 'A'); printf(".\n"); } else printf("Sorted sequence cannot be determined.\n"); } return 0;}
0 0
- POJ 1094 Sorting It All Out(欧拉排序)
- POJ 1094 Sorting It All Out(拓扑排序)
- Poj 1094-Sorting It All Out [拓扑排序]
- POJ 1094-Sorting It All Out 拓扑排序
- zoj 1060 || poj 1094 Sorting It All Out(拓扑排序)
- POJ 1094 Sorting It All Out 拓扑排序
- POJ 1094 Sorting It All Out 拓扑排序
- POJ 1094 Sorting It All Out 拓扑排序
- poj 1094 Sorting It All Out 拓扑排序
- POJ 1094 Sorting It All Out (拓扑排序)
- POJ 1094 Sorting It All Out 拓扑排序
- poj 1094 Sorting It All Out(拓扑排序)
- poj 1094 Sorting It All Out 拓扑排序
- poj 1094 Sorting It All Out 拓扑排序
- poj 1094 Sorting It All Out (拓扑排序)
- poj 1094 Sorting It All Out (拓扑排序)
- Poj 1094 Sorting It All Out——拓扑排序
- POJ 1094 Sorting It All Out 拓扑排序+Floyd算法
- 关于easyui中datagrid在使用过程中遇到的问题
- HDU 2039 三角形
- 【阅读】《Head First HTML 与 CSS》第六章——标准与其他
- Python学习笔记—基础环境配置
- ubuntu 下安装opencv 2.3.1 人脸识别 .
- POJ 1094 Sorting It All Out(欧拉排序)
- Protractor小结
- 【前端技术】前端技术综述
- 通用数据XML
- 我想谈谈上次的面试
- 判断设备是否为iPhone5的方法
- 从头到尾彻底理解KMP
- own problem, ICPC Asia regionals, Amritapuri 2010 部分题解
- 工作笔记 内核模块