题意:给出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. Toad for Oracle 快捷键

    F4 看表的结构 F5 执行对话框中的SQL,注意最后需要以;结尾 F7 清除当前编辑框中所有的sql F8 查看历史的sql语句 F9 执行当前行的sql F10 看菜单 Ctrl + F12 保存 ...

  2. Linux 网络故障排查

    1.第一步是要确认网卡本身是否工作正常?利用ping工具可以确认这点.输入ping 127.0.0.1 ,然后看是否正常ping 通? 这里的127.0.0.1 被称作主机的回环接口,是TCP/IP协 ...

  3. Node.js学习资料整理

    了解node,node主要能干啥? Node.js究竟是什么?:http://www.ibm.com/developerworks/cn/opensource/os-nodejs/ nodejs教程: ...

  4. 转:JAVA中this用法小结

    转:http://blog.sina.com.cn/s/blog_6a6badc90100t8hm.html#SinaEditor_Temp_FontName Java关键字this只能用于方法方法体 ...

  5. VS2015编译错误:调用的目标发生了异常--->此实现不是Windows平台FLPS验证的加密算法的一部分。

    在Win10下安装好几次VS2015(企业版)了,这次发生了一个奇怪的问题,错误截图如下: 控制台.WPF等项目均有此错误!但是ASP.NET项目却可以编译运行!一开始还以为VS2015安装错误,修复 ...

  6. Silverlight动画学习笔记(三):缓动函数

    (一)定义: 缓动函数:可以将自定义算术公式应用于动画 (二)为什么要用缓动函数: 您可能希望某一对象逼真地弹回或其行为像弹簧一样.您可以使用关键帧动画甚至 From/To/By 动画来大致模拟这些效 ...

  7. mongodb在ubuntu下的couldn‘t remove fs lock errno:9 Bad file descriptor的错误

    按照官网上的安装方法: 在ubuntu系统下有可能出现如下错误: couldn't remove fs lock errno:9 Bad file descriptor 此时需要修改文件所有者 $ s ...

  8. Use a layout_width of 0dip instead of wrap_content for better performance.......【Written By KillerLegend】

    当你在一个Linearlayout布局中只为一个组件设置android:layout_weight属性时,那么这个组件将默认填充Linearlayout的剩余空间(宽度与高度方向),而不用事先进行测量 ...

  9. Hibernate之HQL总结

    hibernate运行过程: Hibernate作用 1.hibernate是java应用和关系数据库之间的桥梁,她负责java对象和关系数据库之间的映射. 2.hibernate内部封装了通过JDB ...

  10. java dom4j解析xml用到的几个方法

    1. 读取并解析XML文档: SAXReader reader = new SAXReader(); Document document = reader.read(new File(fileName ...