题目:http://poj.org/problem?id=1094

看到此题,首先觉得这是一种层层递进的关系,所以可以想到用拓扑排序;

就像人工排序,每次需要找到一个最小的,再找到新的最小的……所以用有向边代表小的元素到大的元素的关系,每次的入度为0的点就是最小的;

出现错误也就是出现了环,可以看做是拓扑排序过程后还有没有被排到的点,也就是怎样入度都不为0;

因为要输出哪一步,所以就一步一步,每一步上建图、判断等等;

注意因为上一步不能影响下一步,所以排序中不能把真的入度减去。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
priority_queue<int,vector<int>,greater<int> >q;
int n,m,reg[],ans[],num,tmp[];
bool sid[][],f0,f1;
char dc[];
int per()
{
memset(ans,,sizeof ans);
while(q.size())q.pop();
for(int i=;i<=n;i++)
if(!reg[i])q.push(i);//
memcpy(tmp,reg,sizeof reg);//!!!注意别影响全局
num=;
bool flag=;
while(q.size())
{
if(q.size()>)flag=;//有超过一个入度为0的点
int x=q.top();q.pop();
ans[++num]=x;
for(int i=;i<=n;i++)
if(sid[x][i])
{
tmp[i]--;
if(!tmp[i])q.push(i);
}
}
if(num<n)return ;//即使不完全也应该有n个,否则有环
if(flag)return -;//可能还没完全
return ;
}
int main()
{
while(scanf("%d%d",&n,&m)==)
{
if(!n&&!m)return ;
memset(sid,,sizeof sid);
memset(reg,,sizeof reg);
f0=;f1=;
for(int i=;i<=m;i++)
{
cin>>dc;
if(f0||f1)continue;
if(sid[dc[]-'A'+][dc[]-'A'+])
{
f0=;
printf("Inconsistency found after %d relations.\n",i);
continue;
}
if(!sid[dc[]-'A'+][dc[]-'A'+])//!!!
{
sid[dc[]-'A'+][dc[]-'A'+]=;
reg[dc[]-'A'+]++;
}
int k=per();
if(!k)
{
f0=;
printf("Inconsistency found after %d relations.\n",i);
}
if(k==)
{
f1=;
printf("Sorted sequence determined after %d relations: ",i);
for(int i=;i<=n;i++)
printf("%c",char(ans[i]+'A'-)); printf(".\n");
}
}
if(!f0&&!f1)
printf("Sorted sequence cannot be determined.\n");
}
}

poj1094Sorting It All Out——拓扑排序的更多相关文章

  1. poj1094Sorting It All Out 拓扑排序

    做拓扑排序的题目,首先要知道两条定理: 1.最后得到的拓扑数组的元素个数如果小于n,则不存在拓扑序列.  (有圈) 2.如果一次入队的入度为零的点数大于1,则拓扑序列不唯一. (关系不确定) 本题有一 ...

  2. POJ--1094--Sorting It All Out||NYOJ--349--Sorting It All Out(拓扑排序)

    NYOJ的数据水一点,POJ过了是真的过了 /* 拓扑排序模板题: 每次输入都要判断有环与有序的情况,如果存在环路或者已经有序可以输出则跳过下面的输入 判断有序,通过是否在一个以上的入度为0的点,存在 ...

  3. 算法与数据结构(七) AOV网的拓扑排序

    今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...

  4. 有向无环图的应用—AOV网 和 拓扑排序

    有向无环图:无环的有向图,简称 DAG (Directed Acycline Graph) 图. 一个有向图的生成树是一个有向树,一个非连通有向图的若干强连通分量生成若干有向树,这些有向数形成生成森林 ...

  5. 【BZOJ-2938】病毒 Trie图 + 拓扑排序

    2938: [Poi2000]病毒 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 609  Solved: 318[Submit][Status][Di ...

  6. BZOJ1565 [NOI2009]植物大战僵尸(拓扑排序 + 最大权闭合子图)

    题目 Source http://www.lydsy.com/JudgeOnline/problem.php?id=1565 Description Input Output 仅包含一个整数,表示可以 ...

  7. 图——拓扑排序(uva10305)

    John has n tasks to do. Unfortunately, the tasks are not independent and the execution of one task i ...

  8. Java排序算法——拓扑排序

    package graph; import java.util.LinkedList; import java.util.Queue; import thinkinjava.net.mindview. ...

  9. poj 3687(拓扑排序)

    http://poj.org/problem?id=3687 题意:有一些球他们都有各自的重量,而且每个球的重量都不相同,现在,要给这些球贴标签.如果这些球没有限定条件说是哪个比哪个轻的话,那么默认的 ...

随机推荐

  1. Spark源码分析之八:Task运行(二)

    在<Spark源码分析之七:Task运行(一)>一文中,我们详细叙述了Task运行的整体流程,最终Task被传输到Executor上,启动一个对应的TaskRunner线程,并且在线程池中 ...

  2. Array容易被忽略的join

    var lists, items = '', i; lists = [{ Fruits:'苹果' },{ Fruits:'香蕉' },{ Fruits:'菠萝' }]; /*items += '< ...

  3. Mac修改默认python版本

    研究python爬虫,需要用到Beautiful Soup 但是Mac默认的python版本为2.7 自己安装了3.6的版本 import 报错 查找资料: Mac在启动,会先加载系统配置文件(包括~ ...

  4. PowerBuilder -- 条码打印

    # 使用ocx控件 使用微软的MSBCODE9.OCX,但是注册老不成功,需要安装office之后才能注册成功,不知道有没有好的处理方法?? # 使用字体 字体下载:http://download.c ...

  5. Quart 2D 绘制图形简单总结(转)

    0  CGContextRef context = UIGraphicsGetCurrentContext(); 设置上下文 1 CGContextMoveToPoint 开始画线 2 CGConte ...

  6. Spring、Hibernate 数据不能插入到数据库问题解决

    1.问题:在使用Spring.Hibernate开发的数据库应用中,发现不管如何,数据都插不到数据库. 可是程序不报错.能查询到,也能插入. 2.分析:Hibernate设置了自己主动提交仍然无论用, ...

  7. 【BZOJ1095】[ZJOI2007]Hide 捉迷藏 动态树分治+堆

    [BZOJ1095][ZJOI2007]Hide 捉迷藏 Description 捉迷藏 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉 ...

  8. 使用jdk中keytool生成证书

    -genkey 在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥.私钥和证书 -alias 产生别名 -keystor ...

  9. jvm堆查看

    jps查看jvm的进程号 jmap -histo:live [进程号] >log.txt dump jvm堆.

  10. php总结5——常量、文件上传

    5.1常量 系统常量: PHP_OS  操作系统 PHP_VERSION    php版本 PHP_SAPI    运行方式 自定义常量: define("常量名称"," ...