题意:给出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. Fragstats景观分析研究

    QQ 交流群: Fragstats景观分析 加群链接:http://url.cn/N4wZ3N

  2. GDAL读取tiff文件/C++源码

    // gdal_geotiff.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "gdal_priv.h&quo ...

  3. josephus问题

    问题描述 n个人围成一圈,号码为1-n,从1开始报数,报到2的退出,剩下的继续从1开始报数,求最后一个人的号码. 算法分析 最直观的算法是用循环链表模拟.从首节点开始,不断删除第二个节点,直到只剩一个 ...

  4. wordpress忘记密码重置

    一直使用浏览器记录密码的方式登陆wordpress,直到有一天重装系统,而浏览器的记录又没有备份,结果怎么也想不起当初所设定的密码了…… -_-||| 遂google了一番,发现了直接修改数据库重设密 ...

  5. 百度编辑器(Ueditor)最新版(1.4.3.3)插入锚点失败原因分析及BUG修复

    用百度编辑器——Ueditor(版本1.4.3.3,2016-05-18日上线)插入锚点的时候,每次总是失败,百思不得其解.通过分析Ueditor的代码ueditor.all.js,可以看出Uedit ...

  6. DevExpress navBarControl 和 xtraTabbedMdiManager实现浏览器标签页效果

    一:navBarControl 属性设置 工具箱中的Navigation & Layout选项卡下找到NavBarControl,拖到窗体中 工具箱中添加2个imageCollection.分 ...

  7. Turn.js 实现翻书效果的学习与总结

    最近CTO给我分配了一个移动端H5开发的任务,主要功能是需要实现翻书效果,我听过主要需求后,当时是呀!!!接下来自己尝试使用fullPage.js和Swiper来实现翻书效果,结果效果都不是非常的理想 ...

  8. JavaScript 中的 replace 方法

    定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. stringObject.replace(regexp/substr,replaceme ...

  9. JavaScript创建对象的写法

    JavaScript 有Date.Array.String等这样的内置对象,功能强大使用简单,人见人爱,但在处理一些复杂的逻辑的时候,内置对象就很无力了,往往需要开发者自定义对象.   对象是什么 从 ...

  10. 修改Win7远程桌面端口

    Win7与XP不同,在开启远程桌面修改端口后是无法直接访问的,原因是还未修改远程桌面在防火墙入站规则中的端口号. 修改远程桌面端口: [HKEY_LOCAL_MACHINE/SYSTEM/Curren ...