<题目链接>

题目大意:

对于N个大写字母,给定它们的一些关系,要求判断出经过多少个关系之后可以确定它们的排序或者排序存在冲突,或者所有的偏序关系用上之后依旧无法确定唯一的排序。

解题分析:

因为本题在确定发生冲突和能够确定唯一排序的时候要及时输出,所以必然是每输入一对关系,就进行一次拓扑排序来判断。然后判断冲突就是判断是否存在环,判断是否能够确定唯一排序就是在不存在环的情况下,同时任何时候都不存在多个入度为0点。

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 #include <queue>
 5 using namespace std;
 6 const int N = 50;
 7 int ind[N],output[N];
 8 bool g[N][N]; //临接矩阵此题可以随便用
 9 int n,m,ans,loc;
10 bool circle,order;
11
12 int topsort( int n ) {
13     queue<int>Q;
14     int inorder = true;
15     int num = 0,temp[N];
16     memcpy(temp,ind,sizeof(ind));   //复制当前所有点的入度,防止下面的操作对其造成影响
17     for( int i = 0; i < n; i++ ) {  //将所有入度为0的点入队列
18         if( !ind[i] ) Q.push(i);
19     }
20     while( !Q.empty() ) {
21         if( Q.size() > 1 )inorder = false; //判断是否存在同时有多个入度为0的点的情况
22         int cur = Q.front();Q.pop();
23         output[++num] = cur; //num计数 以存到out里面
24         for(int i = 0; i < n; i++ )
25             if(g[cur][i]==1 && --temp[i] == 0)
26                 Q.push(i);
27     }
28     if( num != n ) return 1;   //存在环,即发生冲突
29     if( !inorder ) return 0;  //不能确定唯一顺序
30     return -1;    //能够确定唯一顺序
31 }
32 int main(){
33     char s[10];
34     while( scanf("%d%d", &n, &m) != EOF && n ){
35         circle=order=false;
36         memset(g,0,sizeof(g));
37         memset(ind,0,sizeof(ind));
38         for( int i = 1; i <= m; i++ ){
39             scanf("%s", s);
40             if( !circle  && !order ){   //已经产生冲突或者已经能够确定排序,就不用读入了
41                 int u=s[0]-'A',v=s[2]-'A';   //注意这里,所有点的编号是从0~n-1
42                 if(g[u][v] == 0){
43                     g[u][v] = 1;ind[v]++;
44                 }
45                 ans = topsort(n);
46                 if( ans == 1 ){
47                     circle = true;
48                     printf("Inconsistency found after %d relations.\n", i);
49                 }
50                 else if( ans == -1 ){
51                     order = true;
52                     loc=i;   //记录位置
53                 }
54             }
55         }
56         if(!circle && !order )   //如果没有产生环,并且不能够确定唯一的顺序
57             printf("Sorted sequence cannot be determined.\n");
58         else if(order){    //能够确定唯一的顺序
59             printf("Sorted sequence determined after %d relations: ", loc);
60             for(int i=1; i<=n; i++)printf("%c", output[i]+'A');puts(".");
61         }
62     }
63 }

2018-11-21

转载于:https://www.cnblogs.com/00isok/p/9994971.html

POJ 1094 Sorting It All Out 【拓扑排序】相关推荐

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

    题意:给你一些大写字母间的偏序关系,然后让你判断能否唯一确定它们之间的关系,或者所给关系是矛盾的,或者到最后也不能确定它们之间的关系.   由DAG图节点的偏序关系确定节点的排序可以由拓扑排序求出.而 ...

  2. POJ - 1094 Sorting It All Out(拓扑排序+floyd传递闭包)

    题目链接:点击查看 题目大意:给出N个点以及M个比较关系,问在第几个数字可以确定出唯一的序列,或者判断出矛盾的序列,或者最后也无法确定出一个唯一的序列 题目分析:关于这个题目可以直接分类讨论,可以直接 ...

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

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

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

    2018-3-25 拓扑排序的题目,需要注意的是,这里是边输入边判断的,之前有一组数据一直不知道为什么不过: A>F B>D C>E F>D D>E E>F 其实当 ...

  5. nyoj349 poj1094 Sorting It All Out(拓扑排序)

    nyoj349   http://acm.nyist.net/JudgeOnline/problem.php?pid=349 poj1094   http://poj.org/problem?id=1 ...

  6. Sorting It All Out 拓扑排序+确定点

    这一道题的话  数据有一点问题    ........     例如 不过 还是   能理解一下  试试吧  ......... 3 5 A<B B<C C<A A<C B&l ...

  7. Poj 1094 拓扑排序Kahn

    Poj 1094 拓扑排序Kahn Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4133 ...

  8. POJ 1094 拓扑排序

    题意大坑,建议先看Discuss-- 否则代码写得就像以下的一团糟.... 其实并不难,拓扑排序+乱搞就可以AC. // by SiriusRen #include <cstdio> #i ...

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

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

  10. [POJ] 3687 Labeling Balls(拓扑排序)

    题目地址:http://poj.org/problem?id=3687 反向建边,即重的球指向轻的球,注意重边,然后拓扑排序.从n-->1循环,即每次从入度为0的球里面选编号大的存(包含输入的逻 ...

最新文章

  1. c语言le后能跟变量吗,【C语言】C语言常量和变量
  2. 影像组学视频学习笔记(33)-使用SimpleITK实现医学影像差值、Li‘s have a solution and plan.
  3. sudoers 用户权限配置_Linux 用户注意!针对Sudo 被曝漏洞,厂商已发布最新版本...
  4. DFS——记忆化搜索——动态规划
  5. 轻松看懂机器学习十大常用算法 - 基础知识
  6. 虚拟主机php.ini在哪里,虚拟主机的php.ini配置文件在哪里
  7. 【ElasticSearch】es 使用function_score及soft_score定制搜索结果的分数
  8. 插件使用 之 Bmap
  9. mariadb 存储引擎mysql_MySQL/MariaDB---查询缓存与存储引擎
  10. PP苹果助手 v2.3.0 官方版
  11. 微软九月份安全补丁提前通知
  12. 智慧医疗整体解决方案
  13. 嵌入式linux IIO驱动
  14. 媒体报道 | 创业邦:巴别鸟,一款便捷好用的企业级文件协同网盘
  15. 网络安全特训之——网络信息安全攻防学习平台(选择题)
  16. 需要给变量赋缺省值吗?
  17. 等待事件 latch:cache buffers chains
  18. 逐梦高新,智赢未来,第四届顺德高新区运动嘉年华正式拉开序幕
  19. 西南政法大学计算机课程要求,新高考西南政法大学需要选哪些课程?附西南政法大学选科要求...
  20. 动态规划——割绳子问题

热门文章

  1. 图像局部特征(二十)--Textons
  2. Nacos教程_4 配置讲解
  3. js 中 的时间类和 setTimeout 和setInterval
  4. python vue token_Flask与Vue的token认证
  5. mysql 组复制和传统复制_2017年12月聚合文章--MySQL 传统复制中常见故障处理和结构优化案例分析 | 码友网...
  6. c语言程序设计删除,C程序设计语言练习1-23 编写一个删除C语言程序中所有的注释语句...
  7. Hive日期格式转换
  8. sqoop job入门 与sqoop增量导入
  9. CF739E Gosha is hunting
  10. 小型公司 --- OSPF 不连续区域进行通信配置