题意:给出n个字符,m对关系,让你输出三种情况:
     1.若到第k行时,能判断出唯一的拓扑序列,则输出:
         Sorted sequence determined after k relations: 序列
     2.若到第k行,出现环,则输出:
         Inconsistency found after k relations.
     3.若直到m行后,仍判断不出唯一的拓扑序列,则输出:
         Sorted sequence cannot be determined.
思路:每读取一行,就进行一次拓扑排序,为防止影响之后的拓扑排序,拓扑排序时用的入度数组为into2。
      如果拓扑排序能得出唯一的序列,即为第一种情况,之后只要直接读取数据,不必操作。
      如果拓扑排序时不存在入度为0的节点,则为第二种情况,之后只要直接读取数据,不必操作。
      如果拓扑排序时有多个入度为0的节点,则继续读取数据再操作,直至读完m行。

#include <iostream>
#include <stdio.h>
#include <cstring>
#include <algorithm> using namespace std;
int into[],into2[]; //存储节点的入度数
int edge[][];
int ans[],idx; //存储拓扑序列
int row,n,m; //row存储最后唯一判断出拓扑序列或者出现环的行数 int topo(int n){
int i,j=,k,t=,mark=;
while(j<n){
t=;
//统计入度为0的节点个数
for(i=;i<n;i++){
if(into2[i]==){
t++;
if(t==)
k=i;
}
}
//当入度为0的点大于1个时,也存在有环的情况!所以当t>1时,不能直接return 0,也要继续拓扑下去,看是否有当t=0的情况,
if(t>){
mark=;
}
if(t==)
return -; //没找到入度为0的点,有环存在
ans[j++]=k;
into2[k]=-;
for(i=;i<n;i++){
if(edge[k][i])
into2[i]--;
}
}
return mark;
}
int main()
{
char a,b,c;
char str[];
int flag,tmp,u,v;
while(scanf("%d%d",&n,&m)!=EOF){
if(n== && m==)
break;
memset(edge,,sizeof(edge));
memset(into,,sizeof(into));
memset(into2,,sizeof(into2));
memset(vis,,sizeof(vis));
idx=;
flag=;//flag=1为第一种情况,=-1为第二种情况,=0为第三种情况
for(int i=;i<=m;i++){
scanf("%s",str);
a=str[];b=str[];
if(flag== || flag==-)
continue;
u=a-'A';v=b-'A';
edge[u][v]=;
into[v]++;
into2[v]++;
tmp=topo(n);
if(tmp==-){
row=i;
flag=-; //有环,即出现矛盾
}
else if(tmp==){
for(int q=;q<;q++)
into2[q]=into[q];
continue;
}
else{
row=i;
flag=;
}
}
if(flag==){
printf("Sorted sequence determined after %d relations: ",row);
for(int i=;i<n;i++)
printf("%c",ans[i]+'A');
printf(".\n");
}
else if(flag==-){
printf("Inconsistency found after %d relations.\n",row);
}
else{
printf("Sorted sequence cannot be determined.\n");
} }
return ;
}

POJ 1094 Sorting It All Out (拓扑排序,判断序列是否唯一,图是否有环)的更多相关文章

  1. [ACM_模拟] POJ 1094 Sorting It All Out (拓扑排序+Floyd算法 判断关系是否矛盾或统一)

    Description An ascending sorted sequence of distinct values is one in which some form of a less-than ...

  2. ACM: poj 1094 Sorting It All Out - 拓扑排序

    poj 1094 Sorting It All Out Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%lld & ...

  3. poj 1094 Sorting It All Out (拓扑排序)

    http://poj.org/problem?id=1094 Sorting It All Out Time Limit: 1000MS   Memory Limit: 10000K Total Su ...

  4. POJ 1094 Sorting It All Out (拓扑排序) - from lanshui_Yang

    Description An ascending sorted sequence of distinct values is one in which some form of a less-than ...

  5. poj 1094 Sorting It All Out_拓扑排序

    题意:是否唯一确定顺序,根据情况输出 #include <iostream> #include<cstdio> #include<cstring> #include ...

  6. POJ 1094 Sorting It All Out 拓扑排序 难度:0

    http://poj.org/problem?id=1094 #include <cstdio> #include <cstring> #include <vector& ...

  7. PKU 1094 Sorting It All Out(拓扑排序)

    题目大意:就是给定一组字母的大小关系判断他们是否能组成唯一的拓扑序列. 是典型的拓扑排序,但输出格式上确有三种形式: 1.该字母序列有序,并依次输出: 2.判断该序列是否唯一: 3.该序列字母次序之间 ...

  8. 图论--拓扑排序--判断是否为DAG图

    #include<cstdio> #include<cstring> #include<vector> #include<queue> using na ...

  9. POJ - 1094 Sorting It All Out(拓扑排序)

    https://vjudge.net/problem/POJ-1094 题意 对于N个大写字母,给定它们的一些关系,要求判断出经过多少个关系之后可以确定它们的排序或者排序存在冲突,或者所有的偏序关系用 ...

  10. hdoj 4324 Triangle LOVE【拓扑排序判断是否存在环】

    Triangle LOVE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tot ...

随机推荐

  1. frame和iframe区别

    1.frame不能脱离frameSet单独使用,iframe可以: 2.frame不能放在body中:如下可以正常显示: <!--<body>--> <frameset ...

  2. (栈)栈 给定push序列,判断给定序列是否是pop序列

    题目: 输入两个整数序列.其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序.为了简单起见,我们假设push序列的任意两个整数都是不相等的. 比如输入的push序列是1.2. ...

  3. Mysql支持中文全文检索的插件mysqlcft-应用中的问题

    MySQL目前版本的全文检索没有对中文很好的支持,但可以通过安装mysqlcft插件来实现,具体的安装使用方法:http://blog.s135.com/post/356/ mysqlcft的官方网站 ...

  4. 查找指定表的字段not null约束,并生成删除Sql

    SElECT 'ALTER TABLE '+OBJECT_NAME(c.parent_obj)+' DROP CONSTRAINT '+ c.name FROM sys.sysconstraints ...

  5. 使用 Visual Studio Team Test 进行单元测试和java中的测试

    C#中test测试地 方法一. 1.从NUnit官网(http://www.nunit.org/index.php)下载最新版本NUnit,当前版本为NUnit2.5.8. 2.安装后,在VS2008 ...

  6. 每日一“酷”之string

    介绍:string模块可以追溯到最早的Python版本中.现在很多的被移植为str和unicode对象的方法,在python3.0中会被完全去除.string模块中,有很多有用的常量和累,用来处理st ...

  7. Microsoft Azure 全球状态

    除了mooncake的中国大陆区域 Azure status http://azure.microsoft.com/en-us/status/?rnd=1#current http://azure.m ...

  8. Python标准库 urllib2 的使用

    1.Proxy 的设置 urllib2 默认会使用环境变量 http_proxy 来设置 HTTP Proxy. 如果想在程序中明确控制 Proxy,而不受环境变量的影响,可以使用下面的方式 impo ...

  9. MyEclipse反编译Class文件

    对于需要查看Java Class文件源码的筒子们来说,必须在项目中导入Java源码才能查看Class文件的具体实现,这不仅十分的麻烦,因为有时我们并不可以获得Class文件对应的Java源码.今天就给 ...

  10. C# list 去重

    /// <summary> /// 汽车商标 获取 /// Redis Key=zgqp315_Redis_TrademarkC_List /// </summary> /// ...