POJ1094 Sorting It All Out 拓扑排序判大小关系
来源:互联网 发布:韩国喜剧 知乎 编辑:程序博客网 时间:2024/06/04 19:42
Sorting It All Out
Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 36371 Accepted: 12800
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.
Source
East Central North America 2001
#include<stdio.h>#include<string.h>#include<vector>#include<iostream>using namespace std;int n,m,cnt;int degree[30];bool hp;bool edges[30][30];char topo[30];vector<char>vec;int toposort(){ vec.clear(); int indegree[30];//函数内部设一个记录入度的数组,尝试着进行拓扑; int i,j,k,m; memcpy(indegree, degree, sizeof(degree)); cnt = 0; m = 0;//判断是否有多个前驱结点,注意初始化放在外循环外面; bool insis=false; for(i = 0; i < n; i++) { bool flag=true; for(j = 0; j < n; j++) { if(indegree[j] == 0) { flag=false; vec.push_back(j+'A');//进拓扑序列; indegree[j]--; for(k = j+1; k < n; k++) { if(indegree[k] == 0) insis=true;//m=1说明有多个前驱结点,拓扑序列不唯一; } for(k = 0; k < n; k++) { if(edges[j][k]) indegree[k]--;//与j相连的结点入度减一; } break; } } if (flag) return -1; } if (insis) return 0; return 1;}int main(){int i,res;char u,v;while(~scanf("%d %d",&n,&m) && m && n){ memset(edges,0,sizeof(edges)); memset(degree,0,sizeof(degree)); hp=false; getchar(); for(i = 1; i <= m; i++) { string rbs; if (hp) {getline(cin, rbs); continue;} scanf("%c<%c",&u,&v); getchar(); if (edges[u-'A'][v-'A']==0){ degree[v-'A']++; edges[u-'A'][v-'A'] = 1; } res = toposort(); if(res == -1) { //有环时直接输出 printf("Inconsistency found after %d relations.\n",i); hp=true; } else if(res == 1) { //当只有一个前驱结点时才输出拓扑序列。 printf("Sorted sequence determined after %d relations: ",i); for (int i=0; i<vec.size(); i++) printf("%c",vec[i]); printf(".\n"); hp=true; } }if (!hp) printf("Sorted sequence cannot be determined.\n");}return 0;}
不能发现有多个0入度就直接return,因为可能会inconsistent!
阅读全文
0 0
- POJ1094 Sorting It All Out 拓扑排序判大小关系
- poj1094 Sorting It All Out (拓扑排序)
- Poj1094 Sorting It All Out (拓扑排序)
- POJ1094-Sorting It All Out 拓扑排序
- poj1094 Sorting It All Out(拓扑排序)
- POJ1094 Sorting It All Out 拓扑排序
- POJ1094 Sorting It All Out(拓扑排序)
- POJ1094 Sorting It All Out(拓扑排序)
- poj1094 Sorting It All Out (拓扑排序)
- poj1094 Sorting it all out(拓扑排序)
- poj1094 Sorting It All Out 拓扑排序
- POJ1094 Sorting It All Out(拓扑排序)
- poj1094 Sorting It All Out【拓扑排序】
- POJ1094 Sorting It All Out 拓扑排序
- ZOJ 1060 Sorting It All Out (POJ1094) (拓扑排序)
- POJ1094《Sorting It All Out》方法:拓扑排序
- 初学拓扑排序---POJ1094(Sorting It All Out)
- nyoj349 poj1094 Sorting It All Out(拓扑排序)
- 前端工程师自救大法:妈妈我要学 React !
- JS 断点调试心得
- java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
- linux常用命令用法集锦
- CSS中的角度
- POJ1094 Sorting It All Out 拓扑排序判大小关系
- 2-1 Point类的定义
- 删除数据库所有存储过程的SQL语句
- java数组之排序 v_1.0.0
- 代码控制 ViewPager 和 TabLayout 滑动.
- BZOJ 1500: [NOI2005]维修数列 splay
- 老妈套路深
- Android 屏幕适配:最全面的解决方案
- 串口设置MIN和TIME