Following Orders
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 5473   Accepted: 2239

Description

Order is an important concept in mathematics and in computer science. For example, Zorn's Lemma states: ``a partially ordered set in which every chain has an upper bound contains a maximal element.'' Order is also important in reasoning about the fix-point semantics of programs.

This problem involves neither Zorn's Lemma nor fix-point semantics, but does involve order. 
Given a list of variable constraints of the form x < y, you are to write a program that prints all orderings of the variables that are consistent with the constraints.

For example, given the constraints x < y and x < z there are two orderings of the variables x, y, and z that are consistent with these constraints: x y z and x z y. 

Input

The input consists of a sequence of constraint specifications. A specification consists of two lines: a list of variables on one line followed by a list of contraints on the next line. A constraint is given by a pair of variables, where x y indicates that x < y.

All variables are single character, lower-case letters. There will be at least two variables, and no more than 20 variables in a specification. There will be at least one constraint, and no more than 50 constraints in a specification. There will be at least one, and no more than 300 orderings consistent with the contraints in a specification.

Input is terminated by end-of-file. 

Output

For each constraint specification, all orderings consistent with the constraints should be printed. Orderings are printed in lexicographical (alphabetical) order, one per line.

Output for different constraint specifications is separated by a blank line. 

Sample Input

a b f g
a b b f
v w x y z
v y x v z v w v

Sample Output

abfg
abgf
agbf
gabf wxzvy
wzxvy
xwzvy
xzwvy
zwxvy
zxwvy

题目大意:

给你一个有向无环图,请你按字典序输出它所有的toposort结果。

回溯法。

回溯时如果使用了全局变量,要在递归出口处立即还原该全局变量,如ac代码中的vis数组和path数组。

此题输入输出好坑啊。用gets才行,I also not kow why。

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#include<stack>
typedef long long ll;
const int maxn=; char str1[],str2[];
int exis[];//26个lowercase字母
int tot;//一共存在多少字母
int cnt;
int to[];
int next[];
int head[];
int in[];//入度
int vis[];
char path[]; void dfs(int x,int m)
{
if(m==tot-)
printf("%s\n",path);
for(int i=head[x];i!=-;i=next[i])
{
int l=to[i];
if(!vis[l])
in[l]--;
}
for(int i=;i<;i++)
{
if(!vis[i]&&exis[i]&&in[i]==)
{
vis[i]=;
path[m+]='a'+i;
dfs(i,m+);
path[m+]='\0';
vis[i]=;
}
}
for(int i=head[x];i!=-;i=next[i])
{
int l=to[i];
if(!vis[l])
in[l]++;
}
} int main()
{
int k=;
while(gets(str1))
{
gets(str2);
if(k>)
printf("\n");
k++; memset(exis,,sizeof(exis));
tot=;
for(int i=;str1[i]!='\0';i++)
{
if(str1[i]>='a'&&str1[i]<='z')
{
exis[str1[i]-'a']=;
tot++;
}
}
cnt=;
memset(head,-,sizeof(head));
memset(in,,sizeof(in));
for(int i=;str2[i]!='\0';i+=)
{
int u=str2[i]-'a',v=str2[i+]-'a';
to[cnt]=v;next[cnt]=head[u];head[u]=cnt++;
in[v]++;
} memset(vis,,sizeof(vis));
for(int i=;i<;i++)
path[i]='\0';
for(int i=;i<;i++)
{
if(exis[i]&&in[i]==)
{
vis[i]=;
path[]='a'+i;
dfs(i,);
path[]='\0';
vis[i]=;
}
}
}
return ;
}

poj 1270 Following Orders (拓扑排序+回溯)的更多相关文章

  1. POJ 1270 Following Orders 拓扑排序

    http://poj.org/problem?id=1270 题目大意: 给你一串序列,然后再给你他们部分的大小,要求你输出他们从小到大的所有排列. 如a b f g 然后 a<b ,b< ...

  2. POJ 1270 Following Orders (拓扑排序,dfs枚举)

    题意:每组数据给出两行,第一行给出变量,第二行给出约束关系,每个约束包含两个变量x,y,表示x<y.    要求:当x<y时,x排在y前面.让你输出所有满足该约束的有序集. 思路:用拓扑排 ...

  3. POJ 1270 Following Orders(拓扑排序)

    题意: 给两行字符串,第一行为一组变量,第二行时一组约束(每个约束包含两个变量,x y 表示 x <y).输出满足约束的所有字符串序列. 思路:拓扑排序 + 深度优先搜索(DFS算法) 课本代码 ...

  4. POJ 1270 Following Orders

    Following Orders Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4902   Accepted: 1982 ...

  5. POJ 2367 (裸拓扑排序)

    http://poj.org/problem?id=2367 题意:给你n个数,从第一个数到第n个数,每一行的数字代表排在这个行数的后面的数字,直到0. 这是一个特别裸的拓扑排序的一个题目,拓扑排序我 ...

  6. poj 3687 Labeling Balls(拓扑排序)

    题目:http://poj.org/problem?id=3687题意:n个重量为1~n的球,给定一些编号间的重量比较关系,现在给每个球编号,在符合条件的前提下使得编号小的球重量小.(先保证1号球最轻 ...

  7. [ACM] POJ 3687 Labeling Balls (拓扑排序,反向生成端)

    Labeling Balls Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10161   Accepted: 2810 D ...

  8. poj 2762(强连通分量+拓扑排序)

    题目链接:http://poj.org/problem?id=2762 题意:给出一个有向图,判断任意的两个顶点(u,v)能否从u到达v,或v到达u,即单连通,输出Yes或No. 分析:对于同一个强连 ...

  9. POJ 2585.Window Pains 拓扑排序

    Window Pains Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1888   Accepted: 944 Descr ...

  10. POJ 1128 Frame Stacking (拓扑排序)

    题目链接 Description Consider the following 5 picture frames placed on an 9 x 8 array. ........ ........ ...

随机推荐

  1. 关于 Python 对象拷贝的那点事?

    概述 在本篇文章中,会先介绍 Python 中对象的基础概念,之后会提到对象的深浅拷贝以及区别.在阅读后,应该掌握如下的内容: 理解变量.引用和对象的关系 理解 Python 对象中 identity ...

  2. python_day05

    今日内容 ''' post请求登录github Request URL: https://github.com/session Request Method: POST #Referer表示上一个请求 ...

  3. Win 使用终端创建mysql数据库及使用(5)

    删除你创建过的数据库newsql里面的所有表 这里必须安装了mysql,并且知道用户名密码IP地址.因为我用的window,所以只介绍Win使用cmd创建的方式 首先windown+R 出现窗口输入c ...

  4. 【Luogu P1502】窗口的星星

    Luogu P1502 题意很好理解,就是问给出的矩形套住的最大和. 但是做起来却十分麻烦. --来自疯狂爆10分的愤怒 一个比较高效的思路是--把每一个星星作为左下角向右上方拓展形成一个矩形, 拓展 ...

  5. linux网络配置(iproute2)

    iproute2家族 ip命令:show  / manipulate routing,devices,policy routing and tunnels(显示/操纵路由.设备.策略路由和隧道) 语法 ...

  6. Dubbo面试八连问,这些你都能答上来吗?

    Dubbo是什么? Dubbo能做什么? Dubbo内置了哪几种服务容器? Dubbo 核心的配置有哪些? Dubbo有哪几种集群容错方案,默认是哪种? Dubbo有哪几种负载均衡策略,默认是哪种? ...

  7. day 26 约束、自定义异常、加密hashlib、logging

    一.约束 建议使用: class BaseMessage(object): def send(self): """ 必须继承BaseMessage,然后其中必须编写sen ...

  8. Electron存储简单数据和用户首选项推荐用electron-store

    electron-store1可以用来保存Electron应用程序或模块的简单数据持久性-保存和加载用户首选项,应用程序状态,缓存等. 1https://github.com/sindresorhus ...

  9. 从两个List集合里找到相同部分和不同部分

    /** * 获取两个集合里元素不同的部分 */ public List<User> getDifferent(List<User> u1, List<User> u ...

  10. CA-RNN论文读取

    ***CA-RNN: Using Context-Aligned Recurrent Neural Networks for Modeling Sentence Similarity(CA-RNN:使 ...