poj 1094 Sorting It All Out(拓扑排序 + 邻接表)
来源:互联网 发布:windows 10安装大小 编辑:程序博客网 时间:2024/05/16 16:18
Sorting It All Out
Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 24176 Accepted: 8361
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 <stdio.h>#include <string.h>#include <queue>#include <vector>using namespace std;#define N 30int n ,m;int son[N], rec[N], num[N];vector<int> G[N];int topo(){memset(num, 0, sizeof(num));int cnt = 0, ok = 0;queue<int> que;for (int i = 0; i < n; i++)if (!son[i])que.push(i);while (!que.empty()){if (que.size() > 1)ok = 1;int t = que.front();num[cnt++] = t;que.pop();for (int i = 0; i < G[t].size(); i++)if (--son[G[t][i]] == 0)que.push(G[t][i]);}if (cnt < n)return -1;else if (ok)return 0;elsereturn 1;}int main(){char a, b, c;int cnt, over, in;while (scanf("%d%d", &n, &m), n && m){// Init.memset(son, 0, sizeof(son));memset(rec, 0, sizeof(rec));for (int i = 0; i < n; i++)G[i].clear();over = in = 0;// Read.for (int i = 0; i < m; i++){scanf("%*c%c%c%c", &a, &c, &b);if (c == '<'){G[a - 'A'].push_back(b - 'A');rec[b - 'A']++;}else{G[b - 'A'].push_back(a - 'A');rec[a - 'A']++;}memcpy(son, rec, sizeof(son));if (over)continue;cnt = topo();if (cnt < 0){in = i;over = 1;}else if (cnt){in = i;over = 2;}}// Printf.if (over == 1)printf("Inconsistency found after %d relations.\n", in + 1);else if (over == 2){printf("Sorted sequence determined after %d relations: ", in + 1);for (int i = 0; i < n; i++)printf("%c", num[i] + 'A');printf(".\n");}elseprintf("Sorted sequence cannot be determined.\n");}return 0;}
- poj 1094 Sorting It All Out(拓扑排序 + 邻接表)
- JOJ 1089 & ZOJ 1060 & poj 1094 Sorting It All Out (邻接表的栈拓扑排序模板)
- POJ 1094Sorting It All Out(拓扑排序)
- [ACM] POJ 1094 Sorting It All Out (拓扑排序)
- poj 1094 Sorting It All Out (拓扑排序)
- POJ 1094-Sorting It All Out(拓扑排序)
- POJ 题目1094Sorting 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 (拓扑排序)@
- Binary Apple Tree
- 《Spring Security 3》 【第三章】增强用户体验(2)
- javascript获取超链接传递的参数,此方法亦能解决2个通过js超链页面传递参数的乱码问题
- 编写线程安全的JSP应用程序
- IOS开发之路-Objective-C 集合下(实战)
- poj 1094 Sorting It All Out(拓扑排序 + 邻接表)
- 【怎样正确认识Windows XP系统待机、休眠、睡眠】
- c++ I/O
- UVa:10132 File Fragmentation
- Hdu 3255 Farming
- JILK - (6) - 32-Bit and 16-Bit Address and Operand Sizes
- 数据库存储索引
- 怎么使用JavaBean组件
- 树形查询中where的作用