POJ1270 Following Orders(拓扑排序+回溯)
题意:
给出一些字母和这些字母之间的大小关系,要求输出所有满足大小的序列。
要点:
这题其实跟拓扑排序关系不是很大了,主要是输出所有序列比较麻烦,注意题目要求要输出所有的字母,也即是没有在大小关系中出现的字母可以插在任意位置上。我们可以这么想:所有当前入度为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. 题目 2. 解题 1. 题目 总共有n个课程,从0到n-1. 有些课程可能有先决条件,例如,你想修课程0,你必须先修一门课程1,这两门课之间的关系表示为:[0,1] 给定课程的总数和先 ...
- 数据结构-图论-拓扑排序模板题(hdu3342)(poj1270)(hdu4857)
dfs与bfs的很直接的应用就是拓扑排序. 拓扑排序如果用数组来模拟链表进行操作,既解决了稀疏图的空间问题,又解决了用链表进行操作麻烦的问题 但是拓扑排序并不是数字大小之间的排序,而是某些事情之间的顺 ...
- 图论 —— AOV 网与拓扑排序
[AOV网] 日常生活中,一项大的工程可以看作是由若干个子工程组成的集合,这些子工程之间必定存在一定的先后顺序,即某些子工程必须在其他的一些子工程完成后才能开始. 我们用有向图来表现子工程之间的先后关 ...
- C#实现有向无环图(DAG)拓扑排序
对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在 ...
- 0x21.搜索 - 树与图的遍历、拓扑排序
目录 一.树与图的深度优先遍历及树的一些性质 1.树与图的深度优先遍历 2.时间戳 3.树的DFS序(树链剖分前驱知识) 4.树的深度 5.树的重心与sizesizesize 6.图的连通块划分 二. ...
- networkx 有向图强连通_leetcode刷题(四):搜索(深度优先搜索,广度优先搜索)拓扑排序,强连通分量...
在开始今天的话题之前,我们先了解一个概念,什么是图的遍历? 图的遍历就是从图中某一点出发访遍图中其余剩余定点,且每个顶点仅被访问一次,这个过程叫做图的遍历. 图的遍历主要被分为深度优先遍历和广度优先遍 ...
- 【算法】图(一)拓扑排序的实现 图的邻接表算法 判断是否图G中存在环
文章目录 用list来表示图,判断是否存在环 邻接表实现拓扑排序 用DFS(邻接矩阵) 来实现拓扑排序. 判断无向图顶点是否全部连通 判断图G中从顶点u到v是否存在简单路径 输出图G中从顶点u到v的所 ...
- hihocoder 1343 : Stable Members【拓扑排序】
hihocoder #1343:题目 解释: 一个学习小组,一共有N个学员,一个主管.每个学员都有自己的导师(一个或者多个),导师可以是其他学员也可以是主管. 每周学员都要把自己的学习报告和收到的报告 ...
- 使用 C# 代码实现拓扑排序
0.参考资料 尊重他人的劳动成果,贴上参考的资料地址,本文仅作学习记录之用. https://www.codeproject.com/Articles/869059/Topological-sorti ...
- 寒假集训日志(二)——最小生成树,拓扑排序,欧拉回路,连通路
今天学的内容挺多的. (一)首先说最小生成树,两种算法: 1.Kruskal算法( 将边排序,然后再选,关键在于检查是否连通,使用并查集) 2.Prim算法(使用点集,有点类似与最短路的算法) 第一题 ...
最新文章
- C语言经典例4-某一天是这一年的第几天
- (转)使用mysqladmin ext了解MySQL运行状态
- Java 8 HashMap键与Comparable接口
- Visual.Assist.X.V10.7.1949的汉化破解补丁
- linux从源码编译软件,linux软件源码的编译安装
- 关于Servlet中filter过滤器的小问题
- pdf在线翻译_如何将英文的PDF文档翻译成中文简体?
- spring cloud config client refresh过程
- WCF BasicHttpBinding 安全解析(3)默认安全设置(IIS宿主)
- 【ffmpeg】overlay带有透明通道的视频
- 判断门禁卡是否加密_教你用手机模拟加密门禁卡-不用电脑
- 首次 golang爬虫插件gocolly/colly 使用经历
- 错误java.lang.NoClassDefFoundError: org/jaxen/VariableContext
- mac-数据库建模工具Workbench、PDMan
- (附源码)spring boot智能车APP毕业设计250623
- Python 根据excel内容批量生成二维码
- c#(webapi)获取当前项目路径
- Kinect驱动识别及SDK下载问题
- 以太网交换机的工作原理
- 知识赛道悖论之年:“娱乐至死”的抗争
热门文章
- android点击按钮修改文本,如何在android中每3秒动态更改按钮文本?
- mysql group 最大值_MySQL groupwise最大值为字段的长度
- flask常用内容:
- XPath 基本语法
- 国外计算机应用基础,计算机应用基础试题(国外英文资料).doc
- 请简述什么是spring的ioc和di_Spring的IoC与DI的理解
- django中怎样新建html页面,Django网站创建从html页面到另一个应用程序的主html页面的链接...
- python筛选数据求均值_Python数据分析之从100万条数据中筛选出前100热门电影
- 深入探索Java泛型
- maven与ant的区别