前置知识:拓扑排序

详细注释都在代码里

 //该题题意明确,就是给定一组字母的大小关系判断他们是否能组成唯一的拓扑序列。
//是典型的拓扑排序,但输出格式上确有三种形式: // 1.该字母序列有序,并依次输出; // 2.该序列不能判断是否有序; // 3.该序列字母次序之间有矛盾,即有环存在。 // 而这三种形式的判断是有顺序的:先判断是否有环(3),
//再判断是否有序(1),最后才能判断是否能得出结果(2)。
//注意:对于(2)必须遍历完整个图,而(1)和(3)一旦得出结果,
//对后面的输入就不用做处理了。 //有一个问题,我不太清楚,就是在确定有序之后,就直接输出答案,
//对右面的输入也不再处理,但是后面的输入可以让其成为环的话又就会
//让其成为环,所以我想这道题就是在确定有序之后,后面的数据,就都不要了。
//应该是这意思把
#include<cstdio>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<queue>
using namespace std;
typedef long long ll;
const int maxn=1e2+;
int G[][];
int in[];
int q[];
void init()
{
memset(G,,sizeof(G)); //图
memset(in,,sizeof(in)); //入度
}
int Toposort(int n)
{
int aim;int cot=;
int tmpin[];
int flag=; //1的时候表示有序
for(int i=;i<=n;i++) tmpin[i]=in[i]; //将入度复制到tmpin里面来
for(int i=;i<=n;i++){
int num=;
for(int j=;j<=n;j++)
if(!tmpin[j]) num++,aim=j; //这里来判断入度数量,aim是入度为0的那个点
//这里如果出现多个入度,就会选择最后面那个先进行操作;
if(!num) return ; //有环;
if(num>) flag=-; //无序
q[cot++]=aim;
tmpin[aim]=-;
for(int j=;j<=n;j++)
if(G[aim][j]) tmpin[j]--;
}
return flag; }
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF){
if(!n&&!m) break;
init();
char str[];
int flag=;
for(int i=;i<=m;i++){
scanf("%s",str);
if(flag) continue;
int l=str[]-'A'+;
int r=str[]-'A'+;
G[l][r]=;
in[r]++;
int judge=Toposort(n);
//有环
if(!judge) printf("Inconsistency found after %d relations.\n",i),flag=;
if(judge==){ //有序
printf("Sorted sequence determined after %d relations: ",i);
for(int j=;j<n;j++)
printf("%c",q[j]+'A'-);
printf(".\n");
flag=;
}
}
//无序
if(!flag) printf("Sorted sequence cannot be determined.\n");
}
return ;
}

拓扑排序(poj 1094)的更多相关文章

  1. 拓扑排序 POJ 1094 Sorting It All Out

    题意:给定N个字和M行他们之间的关系,要求输出他们的拓扑排序.此题采用边输入边检测的方式,如果发现环,就结束并输出当前行号:如果读取到当前行时,可以确定拓扑序列就输出,不管后面的输入(可能包含环路): ...

  2. 拓扑排序 POJ 2367

    今天网易的笔试,妹的,算法题没能A掉,虽然按照思路写了出来,但是尼玛好歹给个测试用例的格式呀,吐槽一下网易的笔试出的太烂了. 就一道算法题,比较石子重量,个人以为解法应该是拓扑排序. 就去POJ找了道 ...

  3. 拓扑排序 POJ 1049 Sorting It All Out

    题目传送门 /* 拓扑排序裸题:有三种情况: 1. 输入时发现与之前的矛盾,Inconsistency 2. 拓扑排序后,没有n个点(先判断cnt,即使一些点没有边连通,也应该是n,此时错误是有环): ...

  4. 图论之拓扑排序 poj 2367 Genealogical tree

    题目链接 http://poj.org/problem?id=2367 题意就是给定一系列关系,按这些关系拓扑排序. #include<cstdio> #include<cstrin ...

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

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

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

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

  7. [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 ...

  8. POJ 1094 Sorting It All Out (拓扑排序,判断序列是否唯一,图是否有环)

    题意:给出n个字符,m对关系,让你输出三种情况:     1.若到第k行时,能判断出唯一的拓扑序列,则输出:         Sorted sequence determined after k re ...

  9. 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 ...

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

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

随机推荐

  1. ZOJ1310-Robot (BFS)

    The Robot Moving Institute is using a robot in their local store to transport different items. Of co ...

  2. 【Python】表白程序

     程序链接:https://www.lanzous.com/i8xj5mh # 打包操作 # 安装pyinstaller # cmd输入 pip install pyinstaller # shift ...

  3. 解决laravel 429请求错误

    429 Too Many Requests(过多请求) 用户在在指定的时间里发送了太多的请求.用于限制速率. 这是laravel的api访问频率 找出throttle  这个中间件,注释掉.429问题 ...

  4. LVS笔试题!

    1.集群分类有哪些及各自实现的目标?高可用:保持系统的稳定,防止系统出现单点故障.负载均衡:比如高并发状态下,多个机器分摊请求,从而达到负载均衡高性能运算集群:比如hadoop分布式计算框架,把多个机 ...

  5. <if test="type == '0' ">没有进去这个判断的问题

    在MyBatis的mapp文件中的if判断中是这样写的 <if test="type == '0' "> and so1.id = #{unitcode} </i ...

  6. 简单的Spring1.0小配置

    开始Spring AOP的小理解 拿一个小例子来说吧!    老师上课   这样的例子!    老师上课--就是一个核心的业务!     那么上课之前需要点名,天气太热,需要开空调! 这个时候,一个老 ...

  7. Go生成随机数

    生成随机数 概念 伪随机数,都是根据一定的算法公式算出来的. 所在包 math/rand 生成随机数的公式需要一个种子数,一般为整数.种子数相同会导致每次启动程序是生成随机数相同,为了避免重复每次生成 ...

  8. linq和匿名方法、委托、匿名委托、lambda

    委托相当于JavaScript中的闭包,c++中的函数指针. c#为了引进这个函数指针,将其进行包装成“委托”,同时将非托管的变成托管的. 1.最初的委托该怎么用 弊端:写的代码量过多,还要写一个显示 ...

  9. linq和扩展方法

    c#的扩展方法 1.必须是在一个非嵌套.非泛型的静态类中的静态方法 2.至少一个参数,第一个参数附加this,不能有其他修饰符如out.ref 3.第一个参数不能是指针类型 上面例子是自定义的一个扩展 ...

  10. Win系统如何修改远程桌面端口3389

    Win系统如何修改远程桌面端口3389: https://jingyan.baidu.com/article/ce43664928d5293773afd39b.html window10远程桌面连接: ...