poj 1094 Sorting It All Out(nyoj 349)
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 24544 | Accepted: 8503 |
Description
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
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
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.
题目大意是:给出若干个关系,判断是否能判断出各个数的顺序,如果能,那么输出再第几个关系的时候就能确定顺序,如果不能,有两种输出,要么出现矛盾,要么直到所有关系都判断完了也没法确定顺序
使用拓扑排序每次去掉一个入度为0的点
#include<stdio.h>
bool map[27][27];
char str[27];
int tuopu(int total)
{
bool flag[27] = {0};
int count = 0;
int inagree = 0;
int i, j;
int f;
int n = 0;
int ex;
int mark;
bool ex_flag = 0;
for(ex = 0; ex < total; ex++)
{
inagree = 0; for(i = 0; i < total; i++)
{
f = 0;
if(flag[i] == 1)
continue;
for(j = 0; j < total; j++)
{
if(map[j][i] == 1 && flag[j] == 0)
{
f = 1;
break;
}
}
if(f == 0)
{
inagree++;
mark = i;
}
if(inagree > 1)
{
ex_flag = 1;
break;
}
}
if(inagree == 0 && count < total)
{
return -1;
}
flag[mark] = 1;
count ++;
str[n ++] = 'A' + mark;
}
if(ex_flag == 1)
return 1;
str[n] = 0;
return 0;
}
int main()
{
int n, m;
while(scanf("%d %d", &n, &m), n != 0 || m != 0)
{
getchar();
int i;
char a, b;
int flag = 1;
int mark;
for(i = 1; i <= m; i++)
{
scanf("%c<%c", &a, &b);
getchar();
if(flag != -1 && flag != 0)
{
map[a - 'A'][b - 'A'] = 1;
int temp = tuopu(n);
if(temp == 0)
{
flag = 0;//成功
mark = i;
}
else if(temp == -1)
{
flag = -1;//矛盾
mark = i;
}
}
}
if(flag == 0)
printf("Sorted sequence determined after %d relations: %s.\n", mark, str);
else if(flag == 1)
printf("Sorted sequence cannot be determined.\n");
else
printf("Inconsistency found after %d relations.\n", mark);
int j;
for(i = 0; i < 27; i++)
{
for(j = 0; j < 27; j++)
map[i][j] = 0;
}
}
return 0;
}
poj 1094 Sorting It All Out(nyoj 349)的更多相关文章
- [ACM] POJ 1094 Sorting It All Out (拓扑排序)
Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 26801 Accepted: 92 ...
- POJ - 1094 Sorting It All Out(拓扑排序)
https://vjudge.net/problem/POJ-1094 题意 对于N个大写字母,给定它们的一些关系,要求判断出经过多少个关系之后可以确定它们的排序或者排序存在冲突,或者所有的偏序关系用 ...
- 题解报告:poj 1094 Sorting It All Out(拓扑排序)
Description An ascending sorted sequence of distinct values is one in which some form of a less-than ...
- poj.1094.Sorting It All Out(topo)
Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 28762 Accepted: 99 ...
- 【POJ】1094 Sorting It All Out(拓扑排序)
http://poj.org/problem?id=1094 原来拓扑序可以这样做,原来一直sb的用白书上说的dfs............ 拓扑序只要每次将入度为0的点加入栈,然后每次拓展维护入度即 ...
- POJ 1094 Sorting It All Out(经典拓扑+邻接矩阵)
( ̄▽ ̄)" //判环:当入度为0的顶点==0时,则有环(inconsistency) //判序:当入度为0的顶点仅为1时,则能得到有序的拓扑排序,否则无序 //边输入边判断,用contin ...
- POJ 1094 Sorting It All Out(拓扑排序+判环+拓扑路径唯一性确定)
Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 39602 Accepted: 13 ...
- POJ 1094 Sorting It All Out (拓扑排序,判断序列是否唯一,图是否有环)
题意:给出n个字符,m对关系,让你输出三种情况: 1.若到第k行时,能判断出唯一的拓扑序列,则输出: Sorted sequence determined after k re ...
- ACM: poj 1094 Sorting It All Out - 拓扑排序
poj 1094 Sorting It All Out Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%lld & ...
随机推荐
- wamp下Apache2.4.x局域网访问403的解决办法
1.我们打开Apache目录\wamp\bin\apache\apache2.4.9下的“conf”文件夹,找到httpd.conf. 2.找到# onlineoffline tag - don' ...
- js中冒泡事件和捕获事件
js中冒泡事件和捕获事件: 冒泡事件:冒泡事件是从里向外,即是从被绑定元素开始一直向外到达页面的所有祖先元素都会被触发,这 一过程被称为事件冒泡.这个事件从原始元素开始一直冒泡到DOM树的最上层 捕获 ...
- 必须Mark!43个优秀的Swift开源项目推荐
摘要:拥有着苹果先天生态优势的Swift自发布以来,各种优秀的开源项目便层出不穷.本文作者站在个人的角度,将2014年Swift开源项目做了一个甄别.筛选,从工具.存储.网络.界面.框架到Demo以及 ...
- You need to use a Theme.AppCompat theme (or descendant) with this activity解决方法
报错如下:java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test2/com.exampl ...
- maven设置---Dmaven.multiModuleProjectDirectory system propery is not set.
设置maven 环境变量: MAVEN_HOME:D:\Java\apache-maven-3.3.3 M2_HOME:D:\Java\apache-maven-3.3.3 path:%MAVEN_H ...
- UI-UIImageView和Image的区别
1.UIImageView图片视图控件 继承于UIView 用于显示图片在应用程序中 2.UIImage 是将真实图片文件转化为程序中的图片,然后3.UIImageView是Image的载体,负责显示 ...
- image 与 canvas 的相互转化
转换 Image为 Canvas 要把图片转换为Canvas(画板,画布),可以使用canvas元素 context 的drawImage方法: // 把image 转换为 canvas对象 func ...
- HackerRank "AND xor OR"
Actually I think problem statement is somewhat misleading. No need to mention range [L, R] at all. T ...
- 【Flex学习】Flex4学习网站
http://blog.minidx.com/category/flex 来自为知笔记(Wiz)
- IntelliJ IDEA中运行Tomcat报内存溢出(java.lang.OutOfMemoryError: PermGen space)
在Run/Debug Configuration中修改Tomcat的VM options,在里面输入以下内容: -server -XX:PermSize=128M -XX:MaxPermSize=25 ...