原题链接:http://210.44.14.31/problem/show/1031

很明显是拓扑排序的利用。

注意事项:

1.记录下输入到第几个条件,产生矛盾或者已经排好序。

2.在有矛盾且M>=N-1的情况下,不能输出无法确定顺序。

代码如下(感觉写的不够简练,暂且这样了):

#include<iostream>
#include<queue>
#include<vector>
#include<string>
#include<cstring>
using namespace std;
vector<char>abc[27];
queue<char>sortabc;
int abcsum[27];
int main()
{int N, M;while (cin >> N >> M&&(N!=0||M!=0)){memset(abcsum, 0, sizeof(abcsum));string str;int key = 0;      //记录下输入到第几个条件,产生矛盾或者已经排好序bool p = true;     //记录是否有矛盾bool q = true;        //记录是否已经排好序for (int h = 1; h <= M; h++){cin >> str;if (M < N - 1) continue; //要排好N个序列至少有N-1个条件if (str[0] >= 'a'&&str[0] <= 'z')str[0] -= 32;if (str[2] >= 'a'&&str[2] <= 'z')str[2] -= 32;if (str[1] == '<'){abc[str[0] - 'A'].push_back(str[2]);abcsum[str[2] - 'A']++;}else{abc[str[2] - 'A'].push_back(str[0]);abcsum[str[0] - 'A']++;}if (p){int tempabcsum[27];bool u=true;          //当顺序无法确定时,标记一下while (!sortabc.empty())sortabc.pop();for (int i = 0; i < N; i++)tempabcsum[i] = abcsum[i];for (int i = 0; i < N; i++){int kk = -1;for (int j = 0; j < N; j++){if (tempabcsum[j] == 0){if (kk == -1) kk = j;else u = false;}}if (kk == -1){key = h;p = false;break;}tempabcsum[kk]--;sortabc.push(kk + 'A');for (unsigned int k = 0; k < abc[kk].size(); k++)tempabcsum[abc[kk][k] - 'A']--;}if (u&&q&&sortabc.size() == N){q = false;key = h;}}}if (!q&&sortabc.size() == N){cout << "Sorted sequence determined after " << key << " relations: ";while (!sortabc.empty()){cout << sortabc.front();sortabc.pop();}cout << "." << endl;}else if (!p){cout << "Inconsistency found after " << key << " relations." << endl;}else{cout << "Sorted sequence cannot be determined." << endl;}while (!sortabc.empty())sortabc.pop();for (int i = 0; i < 26; i++){while (!abc[i].empty()){abc[i].pop_back();}}}return 0;
}

sdnu 1031 字母排序(拓扑排序的利用)相关推荐

  1. 用C语言编程实现拓扑排序,拓扑排序(一)之 C语言详解

    本章介绍图的拓扑排序.和以往一样,本文会先对拓扑排序的理论知识进行介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现. 拓扑排序介绍 拓扑排序(Topological Order)是 ...

  2. HDU - 128 确定比赛名次(基于有向无环图(GAD)的排序--拓扑排序)

    题目链接:https://vjudge.net/contest/325616#problem/A 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N,进行比赛,比赛结束 ...

  3. 拓扑排序:利用kahn算法。c++

    拓扑排序 拓扑排序要解决的问题是给一个图的所有节点排序.在一个有向无环图DAG中,我们将图中的顶点以线性的方式进行排序,对于有向边(u,v),确保u在v的前面,认为v依赖于u; 如果u到v有路径,u可 ...

  4. 算法:图(Graph)的遍历、最小生成树和拓扑排序

    背景 不同的数据结构有不同的用途,像:数组.链表.队列.栈多数是用来做为基本的工具使用,二叉树多用来作为已排序元素列表的存储,B 树用在存储中,本文介绍的 Graph 多数是为了解决现实问题(说到底, ...

  5. 判断图有无环_浅谈什么是图拓扑排序

    1 引言   在工程实践中,一个工程项目往往由若干个子项目组成.这些子项目间往往有两种关系:   (1) 先后关系,即必须在某个项完成后才能开始实施另一个子项目.   (2) 子项目间无关系,即两个子 ...

  6. 图解:有向环、拓扑排序与Kosaraju算法

    25张图详解有向环.拓扑排序与Kosaraju算法.有向环如何检测?拓扑排序的原理?Kosaraju算法又是如何得到的?本文告诉你答案 首先来看一下今天的内容大纲,内容非常多,主要是对算法思路与来源的 ...

  7. 拓扑排序之java实现_有向图和拓扑排序Java实现

    package practice; import java.util.ArrayDeque; import java.util.Iterator; import java.util.Stack; pu ...

  8. 有向无环图——AOV网及拓扑排序

    有向无环图--AOV网及拓扑排序 有向无环图 无环的有向图叫有向无环图,简称DAG图 其应用大致如下: 在工程计划和管理方面有着广泛而重要的应用 描述一项工程或系统的进行进程的有效工具 对整个工程和系 ...

  9. 浅谈什么是图拓扑排序

    1 引言   在工程实践中,一个工程项目往往由若干个子项目组成.这些子项目间往往有两种关系:   (1) 先后关系,即必须在某个项完成后才能开始实施另一个子项目.   (2) 子项目间无关系,即两个子 ...

最新文章

  1. 在linux上安装cuda的时候报错:Existing package manager installation of the driver found.
  2. 计算机应用基础课程B,计算机应用基础B卷_百度文库.DOC
  3. 1.6 Java数组也是一种数据类型
  4. 解决GitLab中使用SSH的git clone总是提示输入密码且任何密码都不对
  5. j2ee 简单网站搭建:(十)jquery ztree 插件使用入门
  6. 新年迈出Java后台服务器与数据库交互第一步2022最新通用Java8jdbc8连接mysql8数据库进行增删改查等基本操作详解(IDEA),jar包导入,图片等文件流,批量操作
  7. 会话标识未更新 java_Appscan漏洞之会话标识未更新
  8. 微信扫码登录网页实现原理
  9. 【clickhouse】Clickhouse 版本号历史
  10. Android的触摸监听器实现滑动图片
  11. C语言之运算符优先级(四十二)
  12. CMU15213 Intro to Computer Systems学习笔记(14) Exceptional Control Flow: Signals and Nonlocal Jumps
  13. docker安装nginx并且部署前端项目
  14. C# 电子白板软件开发
  15. 麻省理工学院计算机工程专业排名,美国大学排名大赏之计算机工程专业
  16. 华为云上传docker镜像
  17. 输入年份和天数计算出几月几号
  18. 时序知识图谱推理:Know-Evolve: Deep Temporal Reasoning for Dynamic Knowledge Graphs
  19. SIP协议之通话转接
  20. 波特兰 计算机专业,波特兰州立大学工程学院和计算机科学专业水平考试流程2012017.pdf...

热门文章

  1. 登录TOM163VIP邮箱的几种方式,以及常见问题有哪些?
  2. 多智能体强化学习——相关论文
  3. Mysql-SQL查询(水手预订船案例)
  4. bzoj-1135 Lyz
  5. Invalid component name: “_Ctor“. Component names should conform to valid cus
  6. C++【C++11】
  7. 《高性能iOS 应用开发》之降低你 APP 的电量消耗
  8. 中国首届DFMA降本设计峰会
  9. SAP中如何对预制凭证,增加开户行和账户标识
  10. php strtotime 2099,PHP的strtotime()函数2039年bug问题