题意:

给出一些字母和这些字母之间的大小关系,要求输出所有满足大小的序列。

要点:

这题其实跟拓扑排序关系不是很大了,主要是输出所有序列比较麻烦,注意题目要求要输出所有的字母,也即是没有在大小关系中出现的字母可以插在任意位置上。我们可以这么想:所有当前入度为0的点可以作为起点,假设一个点的入度为3,说明它的前面起码有3个字母,每次dfs递归深度,寻找下一个入度为0的点,最后再回溯即可。

16128464 Seasonal 1270 Accepted 172K 0MS C++ 1302B 2016-09-27 19:52:09
#include<iostream>
#include<cstring>
#include<map>
#include<algorithm>
using namespace std;
const int N = 25;
bool graph[N][N];
char str[N], ans[N];
int indegree[N];
int res;
map<char,int> num;void toposort(int depth)
{if (depth == res)//题目中所有字母都会出现{printf("%s\n", ans);return;}for (int u = 0; u < res; u++){if (indegree[u] == 0)//入度为0说明可以以当前点为起点{indegree[u]--;ans[depth] = str[u];for(int v=0;v<res;v++)if (graph[u][v])indegree[v]--;toposort(depth + 1);indegree[u]++;         //回溯for (int v = 0; v<res; v++)if (graph[u][v])indegree[v]++;}}
}int main()
{char temp[55];while(gets_s(temp)){memset(graph, false, sizeof(graph));memset(indegree, 0, sizeof(indegree));int len = strlen(temp);res = 0;for (int i = 0; i < len; i++)if (isalpha(temp[i]))str[res++] = temp[i];sort(str, str + res);        //确保按照字典序输出for (int i = 0; i < res; i++)num[str[i]] = i;gets_s(temp);len = strlen(temp);int flag = 0;int c1, c2;for (int i = 0; i < len; i++){if (isalpha(temp[i])){if (flag == 0){c1 = num[temp[i]];flag = 1;}else{c2 = num[temp[i]];graph[c1][c2] = true;indegree[c2]++;flag = 0;}}}memset(ans, 0, sizeof(ans));toposort(0);printf("\n");}return 0;
}

转载于:https://www.cnblogs.com/seasonal/p/10343680.html

POJ1270 Following Orders(拓扑排序+回溯)相关推荐

  1. 天池 在线编程 课程表(拓扑排序 + 回溯)

    文章目录 1. 题目 2. 解题 1. 题目 总共有n个课程,从0到n-1. 有些课程可能有先决条件,例如,你想修课程0,你必须先修一门课程1,这两门课之间的关系表示为:[0,1] 给定课程的总数和先 ...

  2. 数据结构-图论-拓扑排序模板题(hdu3342)(poj1270)(hdu4857)

    dfs与bfs的很直接的应用就是拓扑排序. 拓扑排序如果用数组来模拟链表进行操作,既解决了稀疏图的空间问题,又解决了用链表进行操作麻烦的问题 但是拓扑排序并不是数字大小之间的排序,而是某些事情之间的顺 ...

  3. 图论 —— AOV 网与拓扑排序

    [AOV网] 日常生活中,一项大的工程可以看作是由若干个子工程组成的集合,这些子工程之间必定存在一定的先后顺序,即某些子工程必须在其他的一些子工程完成后才能开始. 我们用有向图来表现子工程之间的先后关 ...

  4. C#实现有向无环图(DAG)拓扑排序

    对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在 ...

  5. 0x21.搜索 - 树与图的遍历、拓扑排序

    目录 一.树与图的深度优先遍历及树的一些性质 1.树与图的深度优先遍历 2.时间戳 3.树的DFS序(树链剖分前驱知识) 4.树的深度 5.树的重心与sizesizesize 6.图的连通块划分 二. ...

  6. networkx 有向图强连通_leetcode刷题(四):搜索(深度优先搜索,广度优先搜索)拓扑排序,强连通分量...

    在开始今天的话题之前,我们先了解一个概念,什么是图的遍历? 图的遍历就是从图中某一点出发访遍图中其余剩余定点,且每个顶点仅被访问一次,这个过程叫做图的遍历. 图的遍历主要被分为深度优先遍历和广度优先遍 ...

  7. 【算法】图(一)拓扑排序的实现 图的邻接表算法 判断是否图G中存在环

    文章目录 用list来表示图,判断是否存在环 邻接表实现拓扑排序 用DFS(邻接矩阵) 来实现拓扑排序. 判断无向图顶点是否全部连通 判断图G中从顶点u到v是否存在简单路径 输出图G中从顶点u到v的所 ...

  8. hihocoder 1343 : Stable Members【拓扑排序】

    hihocoder #1343:题目 解释: 一个学习小组,一共有N个学员,一个主管.每个学员都有自己的导师(一个或者多个),导师可以是其他学员也可以是主管. 每周学员都要把自己的学习报告和收到的报告 ...

  9. 使用 C# 代码实现拓扑排序

    0.参考资料 尊重他人的劳动成果,贴上参考的资料地址,本文仅作学习记录之用. https://www.codeproject.com/Articles/869059/Topological-sorti ...

  10. 寒假集训日志(二)——最小生成树,拓扑排序,欧拉回路,连通路

    今天学的内容挺多的. (一)首先说最小生成树,两种算法: 1.Kruskal算法( 将边排序,然后再选,关键在于检查是否连通,使用并查集) 2.Prim算法(使用点集,有点类似与最短路的算法) 第一题 ...

最新文章

  1. C语言经典例4-某一天是这一年的第几天
  2. (转)使用mysqladmin ext了解MySQL运行状态
  3. Java 8 HashMap键与Comparable接口
  4. Visual.Assist.X.V10.7.1949的汉化破解补丁
  5. linux从源码编译软件,linux软件源码的编译安装
  6. 关于Servlet中filter过滤器的小问题
  7. pdf在线翻译_如何将英文的PDF文档翻译成中文简体?
  8. spring cloud config client refresh过程
  9. WCF BasicHttpBinding 安全解析(3)默认安全设置(IIS宿主)
  10. 【ffmpeg】overlay带有透明通道的视频
  11. 判断门禁卡是否加密_教你用手机模拟加密门禁卡-不用电脑
  12. 首次 golang爬虫插件gocolly/colly 使用经历
  13. 错误java.lang.NoClassDefFoundError: org/jaxen/VariableContext
  14. mac-数据库建模工具Workbench、PDMan
  15. (附源码)spring boot智能车APP毕业设计250623
  16. Python 根据excel内容批量生成二维码
  17. c#(webapi)获取当前项目路径
  18. Kinect驱动识别及SDK下载问题
  19. 以太网交换机的工作原理
  20. 知识赛道悖论之年:“娱乐至死”的抗争

热门文章

  1. android点击按钮修改文本,如何在android中每3秒动态更改按钮文本?
  2. mysql group 最大值_MySQL groupwise最大值为字段的长度
  3. flask常用内容:
  4. XPath 基本语法
  5. 国外计算机应用基础,计算机应用基础试题(国外英文资料).doc
  6. 请简述什么是spring的ioc和di_Spring的IoC与DI的理解
  7. django中怎样新建html页面,Django网站创建从html页面到另一个应用程序的主html页面的链接...
  8. python筛选数据求均值_Python数据分析之从100万条数据中筛选出前100热门电影
  9. 深入探索Java泛型
  10. maven与ant的区别