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 & ...
随机推荐
- 解决outlook不能显示鼠标问题
今天发现打开outlook2010后, 没有鼠标显示. 解决方案: Control Panel -> Mouse Settings ->Pointer Options Uncheck th ...
- matlab批量灰色预测
没事玩了一下matlab 发现现在网上的代码都是一组数据预测 所以我就写个批量数据的预测 顺便学习下matlab ----------------------------------我是快乐的分割线- ...
- java中的循环
while循环: while(循环条件){ 循环操作 } 停止while循环有两种方式:1.不再满足while后的循环条件时,循环终止: ...
- Keepalived+MySQL实现高可用(转)
http://www.cnblogs.com/wingsless/p/4033093.html MHA高可用 http://www.cnblogs.com/gomysql/p/3856484.ht ...
- NET 2.0 OCR文字识别技术(Tesseract 引擎)[转]
一.OCR简介 参见http://baike.baidu.com/view/17761.htm?fr=ala0_1 大家参照,我第一次也是这么了解的,呵呵.高手见笑 现在市面上好多OCR 引擎,不 ...
- [原]一个简单的Linux TCP Client所涉及到的头文件
今天在Linux环境下写了一个最简单的TCP Client程序,没想到Linux环境下的头文件竟然这么分散,让我这样的菜鸟很是郁闷啊.编译成功的代码如下: #include <iostream& ...
- Neutron分析(3)—— neutron-l3-agent
一.Layer-3 Networking Extension neutron l3作为一种API扩展,向租户提供了路由和NAT功能. l3扩展包含两种资源: router:在不同内部子网中转发数据包: ...
- WPF拖到、移动控件
只需2个事件和一个point变量即可: Point mouse_offset = , ); void TC_MouseLeftButtonDown(object sender, MouseButton ...
- LintCode "Triangle Count"
Should be "Medium" or even "Easy".. Just with a little Greedy. class Solution { ...
- php反射机制获取未知类的详细信息
使用ReflectionClass就可以获取未知类的详细信息 demo: require("hello.php"); $class = new ReflectionClass(&q ...