http://poj.org/problem?id=1094
来源:互联网 发布:邮件群发软件效果 编辑:程序博客网 时间:2024/06/05 05:21
Sorting It All Out
Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 27774 Accepted: 9616
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 <cstring>#include <vector>using namespace std;bool visit[26];int n, m;bool g[30][30];vector<int>grap[30];char res[30];int ind[30];void init() { for (int i = 0; i < n; i ++) { visit[i] = false; ind[i] = 0; grap[i].clear(); for (int j = 0; j < n; j ++) { g[i][j] = false; } }}bool check(int x, int y) { for (int i = 0; i < n; i ++) { for (int j = 0; j < n; j ++) { for (int k = 0; k < n; k ++) { if (g[i][k] && g[k][j]) g[i][j] = true; } } }return g[x][y];}bool topo(int cur) { if (cur == n) { res[cur] = '\0'; return true; } int cnt = 0; int pos; for (int i = 0; i < n; i ++) { if (!visit[i] && ind[i] == 0) { pos = i; cnt ++; } } if (cnt != 1) return false; visit[pos] = true; for (int i = 0; i < grap[pos].size(); i ++) { ind[grap[pos][i]] --; } res[cur] = char(pos+65); if (topo(cur+1) == false) { visit[pos] = false; for (int i = 0; i < grap[pos].size(); i ++) { ind[grap[pos][i]] ++; } } else { return true; }return false;}int main() { while (scanf("%d%d", &n, &m), n || m) { init(); char str[10]; getchar(); bool flag = false; int ans = -1; int n_flag=-1; for (int i = 0; i < m; i ++) { scanf("%s", str); if (flag == false) { flag = check(str[2]-65, str[0]-65); if (!flag) { g[str[0]-65][str[2]-65] = true; grap[str[0]-65].push_back(str[2]-65); ind[str[2]-65] ++; if (ans == -1 && topo(0)) { ans = i+1; } } else { n_flag = i+1; } } } if (ans != -1) { printf("Sorted sequence determined after %d relations: %s.\n", ans, res); } else if (flag) { printf("Inconsistency found after %d relations.\n", n_flag); } else if (flag == false && ans == -1) { printf("Sorted sequence cannot be determined.\n"); } }return 0;}
0 0
- http://poj.org/problem?id=1094
- http://poj.org/problem?id=2965
- http://poj.org/problem?id=2075
- http://poj.org/problem?id=1125
- http://poj.org/problem?id=2983
- http://poj.org/problem?id=2406
- http://poj.org/problem?id=1961
- http://poj.org/problem?id=1486
- http://poj.org/problem?id=1062
- http://poj.org/problem?id=2983
- http://poj.org/problem?id=3159
- http://poj.org/problem?id=1201
- http://poj.org/problem?id=3259
- http://poj.org/problem?id=3233
- http://poj.org/problem?id=1273
- http://poj.org/problem?id=3281
- http://poj.org/problem?id=1007
- http://poj.org/problem?id=1840
- oc知识点总结
- 什么是“恶意代码”——————【Badboy】
- c++服务器 拆包粘包 过程(1)
- JSP中如何使浏览器点击后退按钮再点击前进按钮时,使网页失效
- UI (一) ios概述 UI概述
- http://poj.org/problem?id=1094
- GetSystemMenu AppendMenu 和 deleteMenu .
- 配置Tomcat的连接池和数据源(以oracle数据库为例)
- 强引用、软引用、弱引用、虚引用
- JQUERY获取当前页面的URL信息
- 对于目标文件系统 文件 过大
- JQuery操作select checkbox radio总结
- 零基础学习 HTML Day 1 Lession2
- PHP中使用curl及代理IP模拟post提交【两种实用方法】