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 & ...
随机推荐
- 一步一步理解Paxos算法
一步一步理解Paxos算法 背景 Paxos 算法是Lamport于1990年提出的一种基于消息传递的一致性算法.由于算法难以理解起初并没有引起人们的重视,使Lamport在八年后重新发表到 TOCS ...
- python3生成标签云
标签云是现在大数据里面最喜欢使用的一种展现方式,其中在python3下也能实现标签云的效果,贴图如下: -------------------进入正文--------------------- 首先要 ...
- python批量制作雷达图
老板要画雷达图,但是数据好多组怎么办?不能一个一个点excel去画吧,那么可以利用python进行批量制作,得到样式如下: 首先制作一个演示的excel,评分为excel随机数生成: 1 =INT(( ...
- Android视录视频示例
这几天需要搞一个Android视频通话功能,从最简单的视频录制开始,网上例子大多不完整.下面的示例参考过别人的代码,还是拿出来给需要的朋友分享下. Activity类:VideoActivity pa ...
- sql字符串查找大小写敏感相关
select * from table where target_text like "3"; 等价于 select * from table where target_t ...
- 图解SQL的各种连接join[转]
对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Codin ...
- 计算阶乘n!末尾0的个数
一.问题描述 给定一个正整数n,请计算n的阶乘n!末尾所含有“0”的个数.例如: 5!=120,其末尾所含有的“0”的个数为1: 10!= 3628800,其末尾所含有的“0”的个数为2: 20!= ...
- Saltstack系列2:Saltstack远程执行命令
命令 命令格式: salt '<操作目标>' <方法>[参数] 例: salt 'wx' cmd.run 'free -m' #查看被控主机内存使用情况 常用参数 针对< ...
- 【hibernate】之标注枚举类型@Enumerated(转载)
实体Entity中通过@Enumerated标注枚举类型,例如将CustomerEO实体中增加一个CustomerType类型的枚举型属性,标注实体后的代码如下所示. @Entity @Table(n ...
- [Perl] Getopt 函数来接收用户参数的使用
我们在linux常常用到一个程序需要加入参数,现在了解一下perl中的有关控制参数的函数.getopt.在linux有的参数有二种形式.一种是–help,另一种是-h.也就是-和–的分别.–表示完整参 ...